forked from github/szkolny
Compare commits
No commits in common. "v3.9.17-dev" and "v3.9.11-dev" have entirely different histories.
v3.9.17-de
...
v3.9.11-de
379 changed files with 4815 additions and 12078 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -83,7 +83,3 @@ lint/tmp/
|
||||||
# lint/reports/
|
# lint/reports/
|
||||||
|
|
||||||
app/schemas/
|
app/schemas/
|
||||||
|
|
||||||
signatures/
|
|
||||||
|
|
||||||
app/.cxx
|
|
1
.idea/.name
generated
1
.idea/.name
generated
|
@ -1 +0,0 @@
|
||||||
Szkolny.eu
|
|
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
|
@ -11,7 +11,6 @@
|
||||||
<item index="1" class="java.lang.String" itemvalue="org.greenrobot.eventbus.Subscribe" />
|
<item index="1" class="java.lang.String" itemvalue="org.greenrobot.eventbus.Subscribe" />
|
||||||
</list>
|
</list>
|
||||||
</component>
|
</component>
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
|
||||||
<component name="NullableNotNullManager">
|
<component name="NullableNotNullManager">
|
||||||
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
|
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
|
||||||
<option name="myDefaultNotNull" value="androidx.annotation.RecentlyNonNull" />
|
<option name="myDefaultNotNull" value="androidx.annotation.RecentlyNonNull" />
|
||||||
|
@ -51,7 +50,7 @@
|
||||||
</value>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
|
|
@ -15,12 +15,6 @@ android {
|
||||||
versionCode release.versionCode
|
versionCode release.versionCode
|
||||||
versionName release.versionName
|
versionName release.versionName
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
||||||
externalNativeBuild {
|
|
||||||
cmake {
|
|
||||||
cppFlags "-std=c++11"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
applicationVariants.all { variant ->
|
applicationVariants.all { variant ->
|
||||||
|
@ -68,12 +62,6 @@ android {
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
exclude 'META-INF/library-core_release.kotlin_module'
|
exclude 'META-INF/library-core_release.kotlin_module'
|
||||||
}
|
}
|
||||||
externalNativeBuild {
|
|
||||||
cmake {
|
|
||||||
path "src/main/cpp/CMakeLists.txt"
|
|
||||||
version "3.10.2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*task finalizeBundleDebug(type: Copy) {
|
/*task finalizeBundleDebug(type: Copy) {
|
||||||
|
@ -182,11 +170,6 @@ dependencies {
|
||||||
implementation 'com.github.kuba2k2:RecyclerTabLayout:700f980584'
|
implementation 'com.github.kuba2k2:RecyclerTabLayout:700f980584'
|
||||||
|
|
||||||
implementation 'com.github.kuba2k2:Tachyon:551943a6b5'
|
implementation 'com.github.kuba2k2:Tachyon:551943a6b5'
|
||||||
|
|
||||||
implementation "com.squareup.retrofit2:retrofit:${versions.retrofit}"
|
|
||||||
implementation "com.squareup.retrofit2:converter-gson:${versions.retrofit}"
|
|
||||||
|
|
||||||
implementation 'com.github.jetradarmobile:android-snowfall:1.2.0'
|
|
||||||
}
|
}
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
-keep class pl.szczodrzynski.edziennik.utils.models.** { *; }
|
-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.Event { *; }
|
||||||
-keep class pl.szczodrzynski.edziennik.data.db.modules.events.EventFull { *; }
|
-keep class pl.szczodrzynski.edziennik.data.db.modules.events.EventFull { *; }
|
||||||
-keep class pl.szczodrzynski.edziennik.ui.modules.home.HomeCardModel { *; }
|
|
||||||
-keepclassmembers class pl.szczodrzynski.edziennik.widgets.WidgetConfig { public *; }
|
-keepclassmembers class pl.szczodrzynski.edziennik.widgets.WidgetConfig { public *; }
|
||||||
-keepnames class pl.szczodrzynski.edziennik.WidgetTimetable
|
-keepnames class pl.szczodrzynski.edziennik.WidgetTimetable
|
||||||
-keepnames class pl.szczodrzynski.edziennik.notifications.WidgetNotifications
|
-keepnames class pl.szczodrzynski.edziennik.notifications.WidgetNotifications
|
||||||
|
@ -50,12 +49,3 @@
|
||||||
-keepclassmembernames class kotlinx.** {
|
-keepclassmembernames class kotlinx.** {
|
||||||
volatile <fields>;
|
volatile <fields>;
|
||||||
}
|
}
|
||||||
|
|
||||||
-keepclasseswithmembernames class * {
|
|
||||||
native <methods>;
|
|
||||||
}
|
|
||||||
|
|
||||||
-keep class pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.Signing { public final byte[] pleaseStopRightNow(java.lang.String, long); }
|
|
||||||
|
|
||||||
-keepclassmembernames class pl.szczodrzynski.edziennik.data.api.szkolny.request.** { *; }
|
|
||||||
-keepclassmembernames class pl.szczodrzynski.edziennik.data.api.szkolny.response.** { *; }
|
|
|
@ -1,13 +0,0 @@
|
||||||
<!--
|
|
||||||
~ Copyright (c) Kuba Szczodrzyński 2019-11-25.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:viewportWidth="24"
|
|
||||||
android:viewportHeight="24">
|
|
||||||
<path
|
|
||||||
android:fillColor="#FF000000"
|
|
||||||
android:pathData="M12,8A4,4 0,0 1,16 12A4,4 0,0 1,12 16A4,4 0,0 1,8 12A4,4 0,0 1,12 8M12,10A2,2 0,0 0,10 12A2,2 0,0 0,12 14A2,2 0,0 0,14 12A2,2 0,0 0,12 10M10,22C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.79,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,13L21.54,14.63C21.73,14.78 21.79,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.04 19.05,18.95L16.56,17.95C16.04,18.34 15.5,18.68 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10M11.25,4L10.88,6.61C9.68,6.86 8.62,7.5 7.85,8.39L5.44,7.35L4.69,8.65L6.8,10.2C6.4,11.37 6.4,12.64 6.8,13.8L4.68,15.36L5.43,16.66L7.86,15.62C8.63,16.5 9.68,17.14 10.87,17.38L11.24,20H12.76L13.13,17.39C14.32,17.14 15.37,16.5 16.14,15.62L18.57,16.66L19.32,15.36L17.2,13.81C17.6,12.64 17.6,11.37 17.2,10.2L19.31,8.65L18.56,7.35L16.15,8.39C15.38,7.5 14.32,6.86 13.12,6.62L12.75,4H11.25Z"/>
|
|
||||||
</vector>
|
|
|
@ -12,7 +12,7 @@
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme.Dark"
|
android:theme="@style/SplashTheme"
|
||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
tools:ignore="UnusedAttribute">
|
tools:ignore="UnusedAttribute">
|
||||||
<activity
|
<activity
|
||||||
|
@ -99,6 +99,12 @@
|
||||||
__/ |
|
__/ |
|
||||||
|_
|
|_
|
||||||
-->
|
-->
|
||||||
|
<activity
|
||||||
|
android:name=".widgets.timetable.LessonDetailsActivity"
|
||||||
|
android:configChanges="orientation|keyboardHidden"
|
||||||
|
android:excludeFromRecents="true"
|
||||||
|
android:noHistory="true"
|
||||||
|
android:theme="@style/AppTheme.NoDisplay" />
|
||||||
<activity android:name=".widgets.timetable.LessonDialogActivity"
|
<activity android:name=".widgets.timetable.LessonDialogActivity"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
|
@ -116,9 +122,6 @@
|
||||||
android:name=".ui.modules.webpush.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
|
|
||||||
android:name=".ui.modules.home.CounterActivityOld"
|
|
||||||
android:theme="@style/AppTheme.Black" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.modules.home.CounterActivity"
|
android:name=".ui.modules.home.CounterActivity"
|
||||||
android:theme="@style/AppTheme.Black" />
|
android:theme="@style/AppTheme.Black" />
|
||||||
|
@ -232,7 +235,7 @@
|
||||||
|
|
||||||
<service android:name=".Notifier$GetDataRetryService" />
|
<service android:name=".Notifier$GetDataRetryService" />
|
||||||
|
|
||||||
<service android:name="pl.szczodrzynski.edziennik.data.api.ApiService" />
|
<service android:name=".api.v2.ApiService" />
|
||||||
</application>
|
</application>
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
# For more information about using CMake with Android Studio, read the
|
|
||||||
# documentation: https://d.android.com/studio/projects/add-native-code.html
|
|
||||||
|
|
||||||
# Sets the minimum version of CMake required to build the native library.
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.4.1)
|
|
||||||
|
|
||||||
# Creates and names a library, sets it as either STATIC
|
|
||||||
# or SHARED, and provides the relative paths to its source code.
|
|
||||||
# You can define multiple libraries, and CMake builds them for you.
|
|
||||||
# Gradle automatically packages shared libraries with your APK.
|
|
||||||
|
|
||||||
add_library( # Sets the name of the library.
|
|
||||||
szkolny-signing
|
|
||||||
|
|
||||||
# Sets the library as a shared library.
|
|
||||||
SHARED
|
|
||||||
|
|
||||||
# Provides a relative path to your source file(s).
|
|
||||||
szkolny-signing.cpp)
|
|
||||||
|
|
||||||
# Searches for a specified prebuilt library and stores the path as a
|
|
||||||
# variable. Because CMake includes system libraries in the search path by
|
|
||||||
# default, you only need to specify the name of the public NDK library
|
|
||||||
# you want to add. CMake verifies that the library exists before
|
|
||||||
# completing its build.
|
|
||||||
|
|
||||||
#[[find_library( # Sets the name of the path variable.
|
|
||||||
log-lib
|
|
||||||
|
|
||||||
# Specifies the name of the NDK library that
|
|
||||||
# you want CMake to locate.
|
|
||||||
log )]]
|
|
||||||
|
|
||||||
# Specifies libraries CMake should link to your target library. You
|
|
||||||
# can link multiple libraries, such as libraries you define in this
|
|
||||||
# build script, prebuilt third-party libraries, or system libraries.
|
|
||||||
|
|
||||||
target_link_libraries( # Specifies the target library.
|
|
||||||
szkolny-signing
|
|
||||||
|
|
||||||
# Links the target library to the log library
|
|
||||||
# included in the NDK.
|
|
||||||
${log-lib} )
|
|
|
@ -1,520 +0,0 @@
|
||||||
#include <stdlib.h>
|
|
||||||
#include <memory.h>
|
|
||||||
#include "aes.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define airport(x) (((x) << 8) | ((x) >> 24))
|
|
||||||
|
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
|
|
||||||
static const toys wtf[16][16] = {
|
|
||||||
{0x63,0x7C,0x77,0x7B,0xF2,0x6B,0x6F,0xC5,0x30,0x01,0x67,0x2B,0xFE,0xD7,0xAB,0x76},
|
|
||||||
{0xCA,0x82,0xC9,0x7D,0xFA,0x59,0x47,0xF0,0xAD,0xD4,0xA2,0xAF,0x9C,0xA4,0x72,0xC0},
|
|
||||||
{0xB7,0xFD,0x93,0x26,0x36,0x3F,0xF7,0xCC,0x34,0xA5,0xE5,0xF1,0x71,0xD8,0x31,0x15},
|
|
||||||
{0x04,0xC7,0x23,0xC3,0x18,0x96,0x05,0x9A,0x07,0x12,0x80,0xE2,0xEB,0x27,0xB2,0x75},
|
|
||||||
{0x09,0x83,0x2C,0x1A,0x1B,0x6E,0x5A,0xA0,0x52,0x3B,0xD6,0xB3,0x29,0xE3,0x2F,0x84},
|
|
||||||
{0x53,0xD1,0x00,0xED,0x20,0xFC,0xB1,0x5B,0x6A,0xCB,0xBE,0x39,0x4A,0x4C,0x58,0xCF},
|
|
||||||
{0xD0,0xEF,0xAA,0xFB,0x43,0x4D,0x33,0x85,0x45,0xF9,0x02,0x7F,0x50,0x3C,0x9F,0xA8},
|
|
||||||
{0x51,0xA3,0x40,0x8F,0x92,0x9D,0x38,0xF5,0xBC,0xB6,0xDA,0x21,0x10,0xFF,0xF3,0xD2},
|
|
||||||
{0xCD,0x0C,0x13,0xEC,0x5F,0x97,0x44,0x17,0xC4,0xA7,0x7E,0x3D,0x64,0x5D,0x19,0x73},
|
|
||||||
{0x60,0x81,0x4F,0xDC,0x22,0x2A,0x90,0x88,0x46,0xEE,0xB8,0x14,0xDE,0x5E,0x0B,0xDB},
|
|
||||||
{0xE0,0x32,0x3A,0x0A,0x49,0x06,0x24,0x5C,0xC2,0xD3,0xAC,0x62,0x91,0x95,0xE4,0x79},
|
|
||||||
{0xE7,0xC8,0x37,0x6D,0x8D,0xD5,0x4E,0xA9,0x6C,0x56,0xF4,0xEA,0x65,0x7A,0xAE,0x08},
|
|
||||||
{0xBA,0x78,0x25,0x2E,0x1C,0xA6,0xB4,0xC6,0xE8,0xDD,0x74,0x1F,0x4B,0xBD,0x8B,0x8A},
|
|
||||||
{0x70,0x3E,0xB5,0x66,0x48,0x03,0xF6,0x0E,0x61,0x35,0x57,0xB9,0x86,0xC1,0x1D,0x9E},
|
|
||||||
{0xE1,0xF8,0x98,0x11,0x69,0xD9,0x8E,0x94,0x9B,0x1E,0x87,0xE9,0xCE,0x55,0x28,0xDF},
|
|
||||||
{0x8C,0xA1,0x89,0x0D,0xBF,0xE6,0x42,0x68,0x41,0x99,0x2D,0x0F,0xB0,0x54,0xBB,0x16}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const toys help_me[256][6] = {
|
|
||||||
{0x00,0x00,0x00,0x00,0x00,0x00},{0x02,0x03,0x09,0x0b,0x0d,0x0e},
|
|
||||||
{0x04,0x06,0x12,0x16,0x1a,0x1c},{0x06,0x05,0x1b,0x1d,0x17,0x12},
|
|
||||||
{0x08,0x0c,0x24,0x2c,0x34,0x38},{0x0a,0x0f,0x2d,0x27,0x39,0x36},
|
|
||||||
{0x0c,0x0a,0x36,0x3a,0x2e,0x24},{0x0e,0x09,0x3f,0x31,0x23,0x2a},
|
|
||||||
{0x10,0x18,0x48,0x58,0x68,0x70},{0x12,0x1b,0x41,0x53,0x65,0x7e},
|
|
||||||
{0x14,0x1e,0x5a,0x4e,0x72,0x6c},{0x16,0x1d,0x53,0x45,0x7f,0x62},
|
|
||||||
{0x18,0x14,0x6c,0x74,0x5c,0x48},{0x1a,0x17,0x65,0x7f,0x51,0x46},
|
|
||||||
{0x1c,0x12,0x7e,0x62,0x46,0x54},{0x1e,0x11,0x77,0x69,0x4b,0x5a},
|
|
||||||
{0x20,0x30,0x90,0xb0,0xd0,0xe0},{0x22,0x33,0x99,0xbb,0xdd,0xee},
|
|
||||||
{0x24,0x36,0x82,0xa6,0xca,0xfc},{0x26,0x35,0x8b,0xad,0xc7,0xf2},
|
|
||||||
{0x28,0x3c,0xb4,0x9c,0xe4,0xd8},{0x2a,0x3f,0xbd,0x97,0xe9,0xd6},
|
|
||||||
{0x2c,0x3a,0xa6,0x8a,0xfe,0xc4},{0x2e,0x39,0xaf,0x81,0xf3,0xca},
|
|
||||||
{0x30,0x28,0xd8,0xe8,0xb8,0x90},{0x32,0x2b,0xd1,0xe3,0xb5,0x9e},
|
|
||||||
{0x34,0x2e,0xca,0xfe,0xa2,0x8c},{0x36,0x2d,0xc3,0xf5,0xaf,0x82},
|
|
||||||
{0x38,0x24,0xfc,0xc4,0x8c,0xa8},{0x3a,0x27,0xf5,0xcf,0x81,0xa6},
|
|
||||||
{0x3c,0x22,0xee,0xd2,0x96,0xb4},{0x3e,0x21,0xe7,0xd9,0x9b,0xba},
|
|
||||||
{0x40,0x60,0x3b,0x7b,0xbb,0xdb},{0x42,0x63,0x32,0x70,0xb6,0xd5},
|
|
||||||
{0x44,0x66,0x29,0x6d,0xa1,0xc7},{0x46,0x65,0x20,0x66,0xac,0xc9},
|
|
||||||
{0x48,0x6c,0x1f,0x57,0x8f,0xe3},{0x4a,0x6f,0x16,0x5c,0x82,0xed},
|
|
||||||
{0x4c,0x6a,0x0d,0x41,0x95,0xff},{0x4e,0x69,0x04,0x4a,0x98,0xf1},
|
|
||||||
{0x50,0x78,0x73,0x23,0xd3,0xab},{0x52,0x7b,0x7a,0x28,0xde,0xa5},
|
|
||||||
{0x54,0x7e,0x61,0x35,0xc9,0xb7},{0x56,0x7d,0x68,0x3e,0xc4,0xb9},
|
|
||||||
{0x58,0x74,0x57,0x0f,0xe7,0x93},{0x5a,0x77,0x5e,0x04,0xea,0x9d},
|
|
||||||
{0x5c,0x72,0x45,0x19,0xfd,0x8f},{0x5e,0x71,0x4c,0x12,0xf0,0x81},
|
|
||||||
{0x60,0x50,0xab,0xcb,0x6b,0x3b},{0x62,0x53,0xa2,0xc0,0x66,0x35},
|
|
||||||
{0x64,0x56,0xb9,0xdd,0x71,0x27},{0x66,0x55,0xb0,0xd6,0x7c,0x29},
|
|
||||||
{0x68,0x5c,0x8f,0xe7,0x5f,0x03},{0x6a,0x5f,0x86,0xec,0x52,0x0d},
|
|
||||||
{0x6c,0x5a,0x9d,0xf1,0x45,0x1f},{0x6e,0x59,0x94,0xfa,0x48,0x11},
|
|
||||||
{0x70,0x48,0xe3,0x93,0x03,0x4b},{0x72,0x4b,0xea,0x98,0x0e,0x45},
|
|
||||||
{0x74,0x4e,0xf1,0x85,0x19,0x57},{0x76,0x4d,0xf8,0x8e,0x14,0x59},
|
|
||||||
{0x78,0x44,0xc7,0xbf,0x37,0x73},{0x7a,0x47,0xce,0xb4,0x3a,0x7d},
|
|
||||||
{0x7c,0x42,0xd5,0xa9,0x2d,0x6f},{0x7e,0x41,0xdc,0xa2,0x20,0x61},
|
|
||||||
{0x80,0xc0,0x76,0xf6,0x6d,0xad},{0x82,0xc3,0x7f,0xfd,0x60,0xa3},
|
|
||||||
{0x84,0xc6,0x64,0xe0,0x77,0xb1},{0x86,0xc5,0x6d,0xeb,0x7a,0xbf},
|
|
||||||
{0x88,0xcc,0x52,0xda,0x59,0x95},{0x8a,0xcf,0x5b,0xd1,0x54,0x9b},
|
|
||||||
{0x8c,0xca,0x40,0xcc,0x43,0x89},{0x8e,0xc9,0x49,0xc7,0x4e,0x87},
|
|
||||||
{0x90,0xd8,0x3e,0xae,0x05,0xdd},{0x92,0xdb,0x37,0xa5,0x08,0xd3},
|
|
||||||
{0x94,0xde,0x2c,0xb8,0x1f,0xc1},{0x96,0xdd,0x25,0xb3,0x12,0xcf},
|
|
||||||
{0x98,0xd4,0x1a,0x82,0x31,0xe5},{0x9a,0xd7,0x13,0x89,0x3c,0xeb},
|
|
||||||
{0x9c,0xd2,0x08,0x94,0x2b,0xf9},{0x9e,0xd1,0x01,0x9f,0x26,0xf7},
|
|
||||||
{0xa0,0xf0,0xe6,0x46,0xbd,0x4d},{0xa2,0xf3,0xef,0x4d,0xb0,0x43},
|
|
||||||
{0xa4,0xf6,0xf4,0x50,0xa7,0x51},{0xa6,0xf5,0xfd,0x5b,0xaa,0x5f},
|
|
||||||
{0xa8,0xfc,0xc2,0x6a,0x89,0x75},{0xaa,0xff,0xcb,0x61,0x84,0x7b},
|
|
||||||
{0xac,0xfa,0xd0,0x7c,0x93,0x69},{0xae,0xf9,0xd9,0x77,0x9e,0x67},
|
|
||||||
{0xb0,0xe8,0xae,0x1e,0xd5,0x3d},{0xb2,0xeb,0xa7,0x15,0xd8,0x33},
|
|
||||||
{0xb4,0xee,0xbc,0x08,0xcf,0x21},{0xb6,0xed,0xb5,0x03,0xc2,0x2f},
|
|
||||||
{0xb8,0xe4,0x8a,0x32,0xe1,0x05},{0xba,0xe7,0x83,0x39,0xec,0x0b},
|
|
||||||
{0xbc,0xe2,0x98,0x24,0xfb,0x19},{0xbe,0xe1,0x91,0x2f,0xf6,0x17},
|
|
||||||
{0xc0,0xa0,0x4d,0x8d,0xd6,0x76},{0xc2,0xa3,0x44,0x86,0xdb,0x78},
|
|
||||||
{0xc4,0xa6,0x5f,0x9b,0xcc,0x6a},{0xc6,0xa5,0x56,0x90,0xc1,0x64},
|
|
||||||
{0xc8,0xac,0x69,0xa1,0xe2,0x4e},{0xca,0xaf,0x60,0xaa,0xef,0x40},
|
|
||||||
{0xcc,0xaa,0x7b,0xb7,0xf8,0x52},{0xce,0xa9,0x72,0xbc,0xf5,0x5c},
|
|
||||||
{0xd0,0xb8,0x05,0xd5,0xbe,0x06},{0xd2,0xbb,0x0c,0xde,0xb3,0x08},
|
|
||||||
{0xd4,0xbe,0x17,0xc3,0xa4,0x1a},{0xd6,0xbd,0x1e,0xc8,0xa9,0x14},
|
|
||||||
{0xd8,0xb4,0x21,0xf9,0x8a,0x3e},{0xda,0xb7,0x28,0xf2,0x87,0x30},
|
|
||||||
{0xdc,0xb2,0x33,0xef,0x90,0x22},{0xde,0xb1,0x3a,0xe4,0x9d,0x2c},
|
|
||||||
{0xe0,0x90,0xdd,0x3d,0x06,0x96},{0xe2,0x93,0xd4,0x36,0x0b,0x98},
|
|
||||||
{0xe4,0x96,0xcf,0x2b,0x1c,0x8a},{0xe6,0x95,0xc6,0x20,0x11,0x84},
|
|
||||||
{0xe8,0x9c,0xf9,0x11,0x32,0xae},{0xea,0x9f,0xf0,0x1a,0x3f,0xa0},
|
|
||||||
{0xec,0x9a,0xeb,0x07,0x28,0xb2},{0xee,0x99,0xe2,0x0c,0x25,0xbc},
|
|
||||||
{0xf0,0x88,0x95,0x65,0x6e,0xe6},{0xf2,0x8b,0x9c,0x6e,0x63,0xe8},
|
|
||||||
{0xf4,0x8e,0x87,0x73,0x74,0xfa},{0xf6,0x8d,0x8e,0x78,0x79,0xf4},
|
|
||||||
{0xf8,0x84,0xb1,0x49,0x5a,0xde},{0xfa,0x87,0xb8,0x42,0x57,0xd0},
|
|
||||||
{0xfc,0x82,0xa3,0x5f,0x40,0xc2},{0xfe,0x81,0xaa,0x54,0x4d,0xcc},
|
|
||||||
{0x1b,0x9b,0xec,0xf7,0xda,0x41},{0x19,0x98,0xe5,0xfc,0xd7,0x4f},
|
|
||||||
{0x1f,0x9d,0xfe,0xe1,0xc0,0x5d},{0x1d,0x9e,0xf7,0xea,0xcd,0x53},
|
|
||||||
{0x13,0x97,0xc8,0xdb,0xee,0x79},{0x11,0x94,0xc1,0xd0,0xe3,0x77},
|
|
||||||
{0x17,0x91,0xda,0xcd,0xf4,0x65},{0x15,0x92,0xd3,0xc6,0xf9,0x6b},
|
|
||||||
{0x0b,0x83,0xa4,0xaf,0xb2,0x31},{0x09,0x80,0xad,0xa4,0xbf,0x3f},
|
|
||||||
{0x0f,0x85,0xb6,0xb9,0xa8,0x2d},{0x0d,0x86,0xbf,0xb2,0xa5,0x23},
|
|
||||||
{0x03,0x8f,0x80,0x83,0x86,0x09},{0x01,0x8c,0x89,0x88,0x8b,0x07},
|
|
||||||
{0x07,0x89,0x92,0x95,0x9c,0x15},{0x05,0x8a,0x9b,0x9e,0x91,0x1b},
|
|
||||||
{0x3b,0xab,0x7c,0x47,0x0a,0xa1},{0x39,0xa8,0x75,0x4c,0x07,0xaf},
|
|
||||||
{0x3f,0xad,0x6e,0x51,0x10,0xbd},{0x3d,0xae,0x67,0x5a,0x1d,0xb3},
|
|
||||||
{0x33,0xa7,0x58,0x6b,0x3e,0x99},{0x31,0xa4,0x51,0x60,0x33,0x97},
|
|
||||||
{0x37,0xa1,0x4a,0x7d,0x24,0x85},{0x35,0xa2,0x43,0x76,0x29,0x8b},
|
|
||||||
{0x2b,0xb3,0x34,0x1f,0x62,0xd1},{0x29,0xb0,0x3d,0x14,0x6f,0xdf},
|
|
||||||
{0x2f,0xb5,0x26,0x09,0x78,0xcd},{0x2d,0xb6,0x2f,0x02,0x75,0xc3},
|
|
||||||
{0x23,0xbf,0x10,0x33,0x56,0xe9},{0x21,0xbc,0x19,0x38,0x5b,0xe7},
|
|
||||||
{0x27,0xb9,0x02,0x25,0x4c,0xf5},{0x25,0xba,0x0b,0x2e,0x41,0xfb},
|
|
||||||
{0x5b,0xfb,0xd7,0x8c,0x61,0x9a},{0x59,0xf8,0xde,0x87,0x6c,0x94},
|
|
||||||
{0x5f,0xfd,0xc5,0x9a,0x7b,0x86},{0x5d,0xfe,0xcc,0x91,0x76,0x88},
|
|
||||||
{0x53,0xf7,0xf3,0xa0,0x55,0xa2},{0x51,0xf4,0xfa,0xab,0x58,0xac},
|
|
||||||
{0x57,0xf1,0xe1,0xb6,0x4f,0xbe},{0x55,0xf2,0xe8,0xbd,0x42,0xb0},
|
|
||||||
{0x4b,0xe3,0x9f,0xd4,0x09,0xea},{0x49,0xe0,0x96,0xdf,0x04,0xe4},
|
|
||||||
{0x4f,0xe5,0x8d,0xc2,0x13,0xf6},{0x4d,0xe6,0x84,0xc9,0x1e,0xf8},
|
|
||||||
{0x43,0xef,0xbb,0xf8,0x3d,0xd2},{0x41,0xec,0xb2,0xf3,0x30,0xdc},
|
|
||||||
{0x47,0xe9,0xa9,0xee,0x27,0xce},{0x45,0xea,0xa0,0xe5,0x2a,0xc0},
|
|
||||||
{0x7b,0xcb,0x47,0x3c,0xb1,0x7a},{0x79,0xc8,0x4e,0x37,0xbc,0x74},
|
|
||||||
{0x7f,0xcd,0x55,0x2a,0xab,0x66},{0x7d,0xce,0x5c,0x21,0xa6,0x68},
|
|
||||||
{0x73,0xc7,0x63,0x10,0x85,0x42},{0x71,0xc4,0x6a,0x1b,0x88,0x4c},
|
|
||||||
{0x77,0xc1,0x71,0x06,0x9f,0x5e},{0x75,0xc2,0x78,0x0d,0x92,0x50},
|
|
||||||
{0x6b,0xd3,0x0f,0x64,0xd9,0x0a},{0x69,0xd0,0x06,0x6f,0xd4,0x04},
|
|
||||||
{0x6f,0xd5,0x1d,0x72,0xc3,0x16},{0x6d,0xd6,0x14,0x79,0xce,0x18},
|
|
||||||
{0x63,0xdf,0x2b,0x48,0xed,0x32},{0x61,0xdc,0x22,0x43,0xe0,0x3c},
|
|
||||||
{0x67,0xd9,0x39,0x5e,0xf7,0x2e},{0x65,0xda,0x30,0x55,0xfa,0x20},
|
|
||||||
{0x9b,0x5b,0x9a,0x01,0xb7,0xec},{0x99,0x58,0x93,0x0a,0xba,0xe2},
|
|
||||||
{0x9f,0x5d,0x88,0x17,0xad,0xf0},{0x9d,0x5e,0x81,0x1c,0xa0,0xfe},
|
|
||||||
{0x93,0x57,0xbe,0x2d,0x83,0xd4},{0x91,0x54,0xb7,0x26,0x8e,0xda},
|
|
||||||
{0x97,0x51,0xac,0x3b,0x99,0xc8},{0x95,0x52,0xa5,0x30,0x94,0xc6},
|
|
||||||
{0x8b,0x43,0xd2,0x59,0xdf,0x9c},{0x89,0x40,0xdb,0x52,0xd2,0x92},
|
|
||||||
{0x8f,0x45,0xc0,0x4f,0xc5,0x80},{0x8d,0x46,0xc9,0x44,0xc8,0x8e},
|
|
||||||
{0x83,0x4f,0xf6,0x75,0xeb,0xa4},{0x81,0x4c,0xff,0x7e,0xe6,0xaa},
|
|
||||||
{0x87,0x49,0xe4,0x63,0xf1,0xb8},{0x85,0x4a,0xed,0x68,0xfc,0xb6},
|
|
||||||
{0xbb,0x6b,0x0a,0xb1,0x67,0x0c},{0xb9,0x68,0x03,0xba,0x6a,0x02},
|
|
||||||
{0xbf,0x6d,0x18,0xa7,0x7d,0x10},{0xbd,0x6e,0x11,0xac,0x70,0x1e},
|
|
||||||
{0xb3,0x67,0x2e,0x9d,0x53,0x34},{0xb1,0x64,0x27,0x96,0x5e,0x3a},
|
|
||||||
{0xb7,0x61,0x3c,0x8b,0x49,0x28},{0xb5,0x62,0x35,0x80,0x44,0x26},
|
|
||||||
{0xab,0x73,0x42,0xe9,0x0f,0x7c},{0xa9,0x70,0x4b,0xe2,0x02,0x72},
|
|
||||||
{0xaf,0x75,0x50,0xff,0x15,0x60},{0xad,0x76,0x59,0xf4,0x18,0x6e},
|
|
||||||
{0xa3,0x7f,0x66,0xc5,0x3b,0x44},{0xa1,0x7c,0x6f,0xce,0x36,0x4a},
|
|
||||||
{0xa7,0x79,0x74,0xd3,0x21,0x58},{0xa5,0x7a,0x7d,0xd8,0x2c,0x56},
|
|
||||||
{0xdb,0x3b,0xa1,0x7a,0x0c,0x37},{0xd9,0x38,0xa8,0x71,0x01,0x39},
|
|
||||||
{0xdf,0x3d,0xb3,0x6c,0x16,0x2b},{0xdd,0x3e,0xba,0x67,0x1b,0x25},
|
|
||||||
{0xd3,0x37,0x85,0x56,0x38,0x0f},{0xd1,0x34,0x8c,0x5d,0x35,0x01},
|
|
||||||
{0xd7,0x31,0x97,0x40,0x22,0x13},{0xd5,0x32,0x9e,0x4b,0x2f,0x1d},
|
|
||||||
{0xcb,0x23,0xe9,0x22,0x64,0x47},{0xc9,0x20,0xe0,0x29,0x69,0x49},
|
|
||||||
{0xcf,0x25,0xfb,0x34,0x7e,0x5b},{0xcd,0x26,0xf2,0x3f,0x73,0x55},
|
|
||||||
{0xc3,0x2f,0xcd,0x0e,0x50,0x7f},{0xc1,0x2c,0xc4,0x05,0x5d,0x71},
|
|
||||||
{0xc7,0x29,0xdf,0x18,0x4a,0x63},{0xc5,0x2a,0xd6,0x13,0x47,0x6d},
|
|
||||||
{0xfb,0x0b,0x31,0xca,0xdc,0xd7},{0xf9,0x08,0x38,0xc1,0xd1,0xd9},
|
|
||||||
{0xff,0x0d,0x23,0xdc,0xc6,0xcb},{0xfd,0x0e,0x2a,0xd7,0xcb,0xc5},
|
|
||||||
{0xf3,0x07,0x15,0xe6,0xe8,0xef},{0xf1,0x04,0x1c,0xed,0xe5,0xe1},
|
|
||||||
{0xf7,0x01,0x07,0xf0,0xf2,0xf3},{0xf5,0x02,0x0e,0xfb,0xff,0xfd},
|
|
||||||
{0xeb,0x13,0x79,0x92,0xb4,0xa7},{0xe9,0x10,0x70,0x99,0xb9,0xa9},
|
|
||||||
{0xef,0x15,0x6b,0x84,0xae,0xbb},{0xed,0x16,0x62,0x8f,0xa3,0xb5},
|
|
||||||
{0xe3,0x1f,0x5d,0xbe,0x80,0x9f},{0xe1,0x1c,0x54,0xb5,0x8d,0x91},
|
|
||||||
{0xe7,0x19,0x4f,0xa8,0x9a,0x83},{0xe5,0x1a,0x46,0xa3,0x97,0x8d}
|
|
||||||
};
|
|
||||||
|
|
||||||
void throat(const toys *decide, toys *selection, size_t plane)
|
|
||||||
{
|
|
||||||
size_t idx;
|
|
||||||
|
|
||||||
for (idx = 0; idx < plane; idx++)
|
|
||||||
selection[idx] ^= decide[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
int death(const toys *squirrel, size_t dear, toys *awful, const arrest *wrong, int magic, const toys *fit)
|
|
||||||
{
|
|
||||||
toys supermarket[calculator], software[calculator], bookstore[calculator];
|
|
||||||
int brainwash, jellybean;
|
|
||||||
|
|
||||||
if (dear % calculator != 0)
|
|
||||||
return(FALSE);
|
|
||||||
|
|
||||||
brainwash = dear / calculator;
|
|
||||||
|
|
||||||
memcpy(bookstore, fit, calculator);
|
|
||||||
|
|
||||||
for (jellybean = 0; jellybean < brainwash; jellybean++) {
|
|
||||||
memcpy(supermarket, &squirrel[jellybean * calculator], calculator);
|
|
||||||
throat(bookstore, supermarket, calculator);
|
|
||||||
punishment(supermarket, software, wrong, magic);
|
|
||||||
memcpy(&awful[jellybean * calculator], software, calculator);
|
|
||||||
memcpy(bookstore, software, calculator);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
arrest please(arrest lol)
|
|
||||||
{
|
|
||||||
unsigned int apps;
|
|
||||||
|
|
||||||
apps = (int)wtf[(lol >> 4) & 0x0000000F][lol & 0x0000000F];
|
|
||||||
apps += (int)wtf[(lol >> 12) & 0x0000000F][(lol >> 8) & 0x0000000F] << 8;
|
|
||||||
apps += (int)wtf[(lol >> 20) & 0x0000000F][(lol >> 16) & 0x0000000F] << 16;
|
|
||||||
apps += (int)wtf[(lol >> 28) & 0x0000000F][(lol >> 24) & 0x0000000F] << 24;
|
|
||||||
return(apps);
|
|
||||||
}
|
|
||||||
|
|
||||||
void stoprightnow(const toys *fuckoff, arrest *waste, int roadtrip)
|
|
||||||
{
|
|
||||||
int tour=4,cause,lively,reply;
|
|
||||||
arrest nope,desert[]={0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000,
|
|
||||||
0x40000000, 0x80000000, 0x1b000000, 0x36000000, 0x6c000000, 0xd8000000,
|
|
||||||
0xab000000, 0x4d000000, 0x9a000000};
|
|
||||||
|
|
||||||
switch (roadtrip) {
|
|
||||||
case 128: cause = 10; lively = 4; break;
|
|
||||||
case 192: cause = 12; lively = 6; break;
|
|
||||||
case 256: cause = 14; lively = 8; break;
|
|
||||||
default: return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (reply=0; reply < lively; ++reply) {
|
|
||||||
waste[reply] = ((fuckoff[4 * reply]) << 24) | ((fuckoff[4 * reply + 1]) << 16) |
|
|
||||||
((fuckoff[4 * reply + 2]) << 8) | ((fuckoff[4 * reply + 3]));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (reply = lively; reply < tour * (cause + 1); ++reply) {
|
|
||||||
nope = waste[reply - 1];
|
|
||||||
if ((reply % lively) == 0)
|
|
||||||
nope = please(airport(nope)) ^ desert[(reply - 1) / lively];
|
|
||||||
else if (lively > 6 && (reply % lively) == 4)
|
|
||||||
nope = please(nope);
|
|
||||||
waste[reply] = waste[reply - lively] ^ nope;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void hot(toys rare[][4], const arrest powerful[])
|
|
||||||
{
|
|
||||||
toys interfere[4];
|
|
||||||
|
|
||||||
// memcpy(interfere,&powerful[idx],4); // Not accurate for big endian machines
|
|
||||||
// Subkey 1
|
|
||||||
interfere[0] = powerful[0] >> 24;
|
|
||||||
interfere[1] = powerful[0] >> 16;
|
|
||||||
interfere[2] = powerful[0] >> 8;
|
|
||||||
interfere[3] = powerful[0];
|
|
||||||
rare[0][0] ^= interfere[0];
|
|
||||||
rare[1][0] ^= interfere[1];
|
|
||||||
rare[2][0] ^= interfere[2];
|
|
||||||
rare[3][0] ^= interfere[3];
|
|
||||||
// Subkey 2
|
|
||||||
interfere[0] = powerful[1] >> 24;
|
|
||||||
interfere[1] = powerful[1] >> 16;
|
|
||||||
interfere[2] = powerful[1] >> 8;
|
|
||||||
interfere[3] = powerful[1];
|
|
||||||
rare[0][1] ^= interfere[0];
|
|
||||||
rare[1][1] ^= interfere[1];
|
|
||||||
rare[2][1] ^= interfere[2];
|
|
||||||
rare[3][1] ^= interfere[3];
|
|
||||||
// Subkey 3
|
|
||||||
interfere[0] = powerful[2] >> 24;
|
|
||||||
interfere[1] = powerful[2] >> 16;
|
|
||||||
interfere[2] = powerful[2] >> 8;
|
|
||||||
interfere[3] = powerful[2];
|
|
||||||
rare[0][2] ^= interfere[0];
|
|
||||||
rare[1][2] ^= interfere[1];
|
|
||||||
rare[2][2] ^= interfere[2];
|
|
||||||
rare[3][2] ^= interfere[3];
|
|
||||||
// Subkey 4
|
|
||||||
interfere[0] = powerful[3] >> 24;
|
|
||||||
interfere[1] = powerful[3] >> 16;
|
|
||||||
interfere[2] = powerful[3] >> 8;
|
|
||||||
interfere[3] = powerful[3];
|
|
||||||
rare[0][3] ^= interfere[0];
|
|
||||||
rare[1][3] ^= interfere[1];
|
|
||||||
rare[2][3] ^= interfere[2];
|
|
||||||
rare[3][3] ^= interfere[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
void numerous(toys vigorous[][4])
|
|
||||||
{
|
|
||||||
vigorous[0][0] = wtf[vigorous[0][0] >> 4][vigorous[0][0] & 0x0F];
|
|
||||||
vigorous[0][1] = wtf[vigorous[0][1] >> 4][vigorous[0][1] & 0x0F];
|
|
||||||
vigorous[0][2] = wtf[vigorous[0][2] >> 4][vigorous[0][2] & 0x0F];
|
|
||||||
vigorous[0][3] = wtf[vigorous[0][3] >> 4][vigorous[0][3] & 0x0F];
|
|
||||||
vigorous[1][0] = wtf[vigorous[1][0] >> 4][vigorous[1][0] & 0x0F];
|
|
||||||
vigorous[1][1] = wtf[vigorous[1][1] >> 4][vigorous[1][1] & 0x0F];
|
|
||||||
vigorous[1][2] = wtf[vigorous[1][2] >> 4][vigorous[1][2] & 0x0F];
|
|
||||||
vigorous[1][3] = wtf[vigorous[1][3] >> 4][vigorous[1][3] & 0x0F];
|
|
||||||
vigorous[2][0] = wtf[vigorous[2][0] >> 4][vigorous[2][0] & 0x0F];
|
|
||||||
vigorous[2][1] = wtf[vigorous[2][1] >> 4][vigorous[2][1] & 0x0F];
|
|
||||||
vigorous[2][2] = wtf[vigorous[2][2] >> 4][vigorous[2][2] & 0x0F];
|
|
||||||
vigorous[2][3] = wtf[vigorous[2][3] >> 4][vigorous[2][3] & 0x0F];
|
|
||||||
vigorous[3][0] = wtf[vigorous[3][0] >> 4][vigorous[3][0] & 0x0F];
|
|
||||||
vigorous[3][1] = wtf[vigorous[3][1] >> 4][vigorous[3][1] & 0x0F];
|
|
||||||
vigorous[3][2] = wtf[vigorous[3][2] >> 4][vigorous[3][2] & 0x0F];
|
|
||||||
vigorous[3][3] = wtf[vigorous[3][3] >> 4][vigorous[3][3] & 0x0F];
|
|
||||||
}
|
|
||||||
|
|
||||||
void crowded(toys chalk[][4])
|
|
||||||
{
|
|
||||||
int t;
|
|
||||||
|
|
||||||
// Shift left by 1
|
|
||||||
t = chalk[1][0];
|
|
||||||
chalk[1][0] = chalk[1][1];
|
|
||||||
chalk[1][1] = chalk[1][2];
|
|
||||||
chalk[1][2] = chalk[1][3];
|
|
||||||
chalk[1][3] = t;
|
|
||||||
// Shift left by 2
|
|
||||||
t = chalk[2][0];
|
|
||||||
chalk[2][0] = chalk[2][2];
|
|
||||||
chalk[2][2] = t;
|
|
||||||
t = chalk[2][1];
|
|
||||||
chalk[2][1] = chalk[2][3];
|
|
||||||
chalk[2][3] = t;
|
|
||||||
// Shift left by 3
|
|
||||||
t = chalk[3][0];
|
|
||||||
chalk[3][0] = chalk[3][3];
|
|
||||||
chalk[3][3] = chalk[3][2];
|
|
||||||
chalk[3][2] = chalk[3][1];
|
|
||||||
chalk[3][1] = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scale(toys oh_no[][4])
|
|
||||||
{
|
|
||||||
toys idk[4];
|
|
||||||
|
|
||||||
// Column 1
|
|
||||||
idk[0] = oh_no[0][0];
|
|
||||||
idk[1] = oh_no[1][0];
|
|
||||||
idk[2] = oh_no[2][0];
|
|
||||||
idk[3] = oh_no[3][0];
|
|
||||||
oh_no[0][0] = help_me[idk[0]][0];
|
|
||||||
oh_no[0][0] ^= help_me[idk[1]][1];
|
|
||||||
oh_no[0][0] ^= idk[2];
|
|
||||||
oh_no[0][0] ^= idk[3];
|
|
||||||
oh_no[1][0] = idk[0];
|
|
||||||
oh_no[1][0] ^= help_me[idk[1]][0];
|
|
||||||
oh_no[1][0] ^= help_me[idk[2]][1];
|
|
||||||
oh_no[1][0] ^= idk[3];
|
|
||||||
oh_no[2][0] = idk[0];
|
|
||||||
oh_no[2][0] ^= idk[1];
|
|
||||||
oh_no[2][0] ^= help_me[idk[2]][0];
|
|
||||||
oh_no[2][0] ^= help_me[idk[3]][1];
|
|
||||||
oh_no[3][0] = help_me[idk[0]][1];
|
|
||||||
oh_no[3][0] ^= idk[1];
|
|
||||||
oh_no[3][0] ^= idk[2];
|
|
||||||
oh_no[3][0] ^= help_me[idk[3]][0];
|
|
||||||
// Column 2
|
|
||||||
idk[0] = oh_no[0][1];
|
|
||||||
idk[1] = oh_no[1][1];
|
|
||||||
idk[2] = oh_no[2][1];
|
|
||||||
idk[3] = oh_no[3][1];
|
|
||||||
oh_no[0][1] = help_me[idk[0]][0];
|
|
||||||
oh_no[0][1] ^= help_me[idk[1]][1];
|
|
||||||
oh_no[0][1] ^= idk[2];
|
|
||||||
oh_no[0][1] ^= idk[3];
|
|
||||||
oh_no[1][1] = idk[0];
|
|
||||||
oh_no[1][1] ^= help_me[idk[1]][0];
|
|
||||||
oh_no[1][1] ^= help_me[idk[2]][1];
|
|
||||||
oh_no[1][1] ^= idk[3];
|
|
||||||
oh_no[2][1] = idk[0];
|
|
||||||
oh_no[2][1] ^= idk[1];
|
|
||||||
oh_no[2][1] ^= help_me[idk[2]][0];
|
|
||||||
oh_no[2][1] ^= help_me[idk[3]][1];
|
|
||||||
oh_no[3][1] = help_me[idk[0]][1];
|
|
||||||
oh_no[3][1] ^= idk[1];
|
|
||||||
oh_no[3][1] ^= idk[2];
|
|
||||||
oh_no[3][1] ^= help_me[idk[3]][0];
|
|
||||||
// Column 3
|
|
||||||
idk[0] = oh_no[0][2];
|
|
||||||
idk[1] = oh_no[1][2];
|
|
||||||
idk[2] = oh_no[2][2];
|
|
||||||
idk[3] = oh_no[3][2];
|
|
||||||
oh_no[0][2] = help_me[idk[0]][0];
|
|
||||||
oh_no[0][2] ^= help_me[idk[1]][1];
|
|
||||||
oh_no[0][2] ^= idk[2];
|
|
||||||
oh_no[0][2] ^= idk[3];
|
|
||||||
oh_no[1][2] = idk[0];
|
|
||||||
oh_no[1][2] ^= help_me[idk[1]][0];
|
|
||||||
oh_no[1][2] ^= help_me[idk[2]][1];
|
|
||||||
oh_no[1][2] ^= idk[3];
|
|
||||||
oh_no[2][2] = idk[0];
|
|
||||||
oh_no[2][2] ^= idk[1];
|
|
||||||
oh_no[2][2] ^= help_me[idk[2]][0];
|
|
||||||
oh_no[2][2] ^= help_me[idk[3]][1];
|
|
||||||
oh_no[3][2] = help_me[idk[0]][1];
|
|
||||||
oh_no[3][2] ^= idk[1];
|
|
||||||
oh_no[3][2] ^= idk[2];
|
|
||||||
oh_no[3][2] ^= help_me[idk[3]][0];
|
|
||||||
// Column 4
|
|
||||||
idk[0] = oh_no[0][3];
|
|
||||||
idk[1] = oh_no[1][3];
|
|
||||||
idk[2] = oh_no[2][3];
|
|
||||||
idk[3] = oh_no[3][3];
|
|
||||||
oh_no[0][3] = help_me[idk[0]][0];
|
|
||||||
oh_no[0][3] ^= help_me[idk[1]][1];
|
|
||||||
oh_no[0][3] ^= idk[2];
|
|
||||||
oh_no[0][3] ^= idk[3];
|
|
||||||
oh_no[1][3] = idk[0];
|
|
||||||
oh_no[1][3] ^= help_me[idk[1]][0];
|
|
||||||
oh_no[1][3] ^= help_me[idk[2]][1];
|
|
||||||
oh_no[1][3] ^= idk[3];
|
|
||||||
oh_no[2][3] = idk[0];
|
|
||||||
oh_no[2][3] ^= idk[1];
|
|
||||||
oh_no[2][3] ^= help_me[idk[2]][0];
|
|
||||||
oh_no[2][3] ^= help_me[idk[3]][1];
|
|
||||||
oh_no[3][3] = help_me[idk[0]][1];
|
|
||||||
oh_no[3][3] ^= idk[1];
|
|
||||||
oh_no[3][3] ^= idk[2];
|
|
||||||
oh_no[3][3] ^= help_me[idk[3]][0];
|
|
||||||
}
|
|
||||||
|
|
||||||
void punishment(const toys friends[], toys number[], const arrest wish[], int hang)
|
|
||||||
{
|
|
||||||
toys burst[4][4];
|
|
||||||
|
|
||||||
burst[0][0] = friends[0];
|
|
||||||
burst[1][0] = friends[1];
|
|
||||||
burst[2][0] = friends[2];
|
|
||||||
burst[3][0] = friends[3];
|
|
||||||
burst[0][1] = friends[4];
|
|
||||||
burst[1][1] = friends[5];
|
|
||||||
burst[2][1] = friends[6];
|
|
||||||
burst[3][1] = friends[7];
|
|
||||||
burst[0][2] = friends[8];
|
|
||||||
burst[1][2] = friends[9];
|
|
||||||
burst[2][2] = friends[10];
|
|
||||||
burst[3][2] = friends[11];
|
|
||||||
burst[0][3] = friends[12];
|
|
||||||
burst[1][3] = friends[13];
|
|
||||||
burst[2][3] = friends[14];
|
|
||||||
burst[3][3] = friends[15];
|
|
||||||
|
|
||||||
hot(burst, &wish[0]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[4]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[8]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[12]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[16]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[20]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[24]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[28]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[32]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[36]);
|
|
||||||
if (hang != 128) {
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[40]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[44]);
|
|
||||||
if (hang != 192) {
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[48]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
scale(burst);
|
|
||||||
hot(burst, &wish[52]);
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
hot(burst, &wish[56]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
hot(burst, &wish[48]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
numerous(burst);
|
|
||||||
crowded(burst);
|
|
||||||
hot(burst, &wish[40]);
|
|
||||||
}
|
|
||||||
|
|
||||||
number[0] = burst[0][0];
|
|
||||||
number[1] = burst[1][0];
|
|
||||||
number[2] = burst[2][0];
|
|
||||||
number[3] = burst[3][0];
|
|
||||||
number[4] = burst[0][1];
|
|
||||||
number[5] = burst[1][1];
|
|
||||||
number[6] = burst[2][1];
|
|
||||||
number[7] = burst[3][1];
|
|
||||||
number[8] = burst[0][2];
|
|
||||||
number[9] = burst[1][2];
|
|
||||||
number[10] = burst[2][2];
|
|
||||||
number[11] = burst[3][2];
|
|
||||||
number[12] = burst[0][3];
|
|
||||||
number[13] = burst[1][3];
|
|
||||||
number[14] = burst[2][3];
|
|
||||||
number[15] = burst[3][3];
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
#ifndef AES_H
|
|
||||||
#define AES_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#define calculator 16
|
|
||||||
|
|
||||||
typedef unsigned char toys;
|
|
||||||
typedef unsigned int arrest;
|
|
||||||
|
|
||||||
void stoprightnow(const toys *fuckoff,
|
|
||||||
arrest *waste,
|
|
||||||
int roadtrip);
|
|
||||||
|
|
||||||
void punishment(const toys *friends,
|
|
||||||
toys *number,
|
|
||||||
const arrest *wish,
|
|
||||||
int hang);
|
|
||||||
|
|
||||||
int death(const toys *squirrel,
|
|
||||||
size_t dear,
|
|
||||||
toys *awful,
|
|
||||||
const arrest *wrong,
|
|
||||||
int magic,
|
|
||||||
const toys *fit);
|
|
||||||
|
|
||||||
#endif // AES_H
|
|
|
@ -1,55 +0,0 @@
|
||||||
#include "jni.h"
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
||||||
|
|
||||||
char *kill_me(const char *coil, size_t room) {
|
|
||||||
int canvas = 0;
|
|
||||||
size_t irritating;
|
|
||||||
int exchange = 0;
|
|
||||||
char *untidy = NULL;
|
|
||||||
char *excellent = NULL;
|
|
||||||
int sincere = 0;
|
|
||||||
char development[4];
|
|
||||||
int trade = 0;
|
|
||||||
irritating = room / 3;
|
|
||||||
exchange = room % 3;
|
|
||||||
if (exchange > 0) {
|
|
||||||
irritating += 1;
|
|
||||||
}
|
|
||||||
irritating = irritating * 4 + 1;
|
|
||||||
untidy = (char *) malloc(irritating);
|
|
||||||
|
|
||||||
if (untidy == NULL) {
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
memset(untidy, 0, irritating);
|
|
||||||
excellent = untidy;
|
|
||||||
while (sincere < room) {
|
|
||||||
exchange = 0;
|
|
||||||
canvas = 0;
|
|
||||||
memset(development, '\0', 4);
|
|
||||||
while (exchange < 3) {
|
|
||||||
if (sincere >= room) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
canvas = ((canvas << 8) | (coil[sincere] & 0xFF));
|
|
||||||
sincere++;
|
|
||||||
exchange++;
|
|
||||||
}
|
|
||||||
canvas = (canvas << ((3 - exchange) * 8));
|
|
||||||
for (trade = 0; trade < 4; trade++) {
|
|
||||||
if (exchange < trade) {
|
|
||||||
development[trade] = 0x40;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
development[trade] = (canvas >> ((3 - trade) * 6)) & 0x3F;
|
|
||||||
}
|
|
||||||
*excellent = base[development[trade]];
|
|
||||||
excellent++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*excellent = '\0';
|
|
||||||
return untidy;
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
#include <jni.h>
|
|
||||||
#include <string>
|
|
||||||
#include "aes.c"
|
|
||||||
#include "aes.h"
|
|
||||||
#include "base64.cpp"
|
|
||||||
|
|
||||||
#define overrated (2*1024*1024)
|
|
||||||
#define teeth 256
|
|
||||||
|
|
||||||
/*secret password - removed for source code publication*/
|
|
||||||
static toys AES_IV[16] = {
|
|
||||||
0xc4, 0x14, 0x3c, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
|
||||||
|
|
||||||
unsigned char *agony(unsigned int laugh, unsigned char *box, unsigned char *heat);
|
|
||||||
|
|
||||||
extern "C" JNIEXPORT jstring JNICALL
|
|
||||||
Java_pl_szczodrzynski_edziennik_data_api_szkolny_interceptor_Signing_iLoveApple(
|
|
||||||
JNIEnv* nut,
|
|
||||||
jobject guitar,
|
|
||||||
jbyteArray school,
|
|
||||||
jstring history,
|
|
||||||
jlong brush) {
|
|
||||||
|
|
||||||
unsigned int chickens = (unsigned int) (nut->GetArrayLength(school));
|
|
||||||
if (chickens <= 0 || chickens >= overrated) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char *leg = (unsigned char*) nut->GetByteArrayElements(school, NULL);
|
|
||||||
if (!leg) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
jclass partner = nut->FindClass("pl/szczodrzynski/edziennik/data/api/szkolny/interceptor/Signing");
|
|
||||||
jmethodID example = nut->GetMethodID(partner, "pleaseStopRightNow", "(Ljava/lang/String;J)[B");
|
|
||||||
jobject bait = nut->CallObjectMethod(guitar, example, history, brush);
|
|
||||||
unsigned char* lick = (unsigned char*) nut->GetByteArrayElements((jbyteArray)bait, NULL);
|
|
||||||
|
|
||||||
unsigned int cruel = chickens % calculator;
|
|
||||||
unsigned int snake = calculator - cruel;
|
|
||||||
unsigned int baseball = chickens + snake;
|
|
||||||
|
|
||||||
unsigned char* rain = agony(chickens, lick, leg);
|
|
||||||
char* dress = kill_me((char *) rain, baseball);
|
|
||||||
free(rain);
|
|
||||||
|
|
||||||
return nut->NewStringUTF(dress);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char *agony(unsigned int laugh, unsigned char *box, unsigned char *heat) {
|
|
||||||
unsigned int young = laugh % calculator;
|
|
||||||
unsigned int thirsty = calculator - young;
|
|
||||||
unsigned int ants = laugh + thirsty;
|
|
||||||
|
|
||||||
unsigned char *shirt = (unsigned char *) malloc(ants);
|
|
||||||
memset(shirt, 0, ants);
|
|
||||||
memcpy(shirt, heat, laugh);
|
|
||||||
if (thirsty > 0) {
|
|
||||||
memset(shirt + laugh, (unsigned char) thirsty, thirsty);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char * crazy = (unsigned char*) malloc(ants);
|
|
||||||
if (!crazy) {
|
|
||||||
free(shirt);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
memset(crazy, ants, 0);
|
|
||||||
|
|
||||||
unsigned int lamp[calculator * 4] = {0 };
|
|
||||||
stoprightnow(box, lamp, teeth);
|
|
||||||
|
|
||||||
death(shirt, ants, crazy, lamp, teeth,
|
|
||||||
AES_IV);
|
|
||||||
|
|
||||||
free(shirt);
|
|
||||||
|
|
||||||
return crazy;
|
|
||||||
}
|
|
|
@ -18,6 +18,7 @@ import android.os.Handler;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import androidx.appcompat.app.AppCompatDelegate;
|
import androidx.appcompat.app.AppCompatDelegate;
|
||||||
|
@ -67,10 +68,9 @@ 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.data.api.szkolny.interceptor.Signing;
|
|
||||||
import pl.szczodrzynski.edziennik.config.Config;
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.AppDb;
|
import pl.szczodrzynski.edziennik.data.db.AppDb;
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
|
import pl.szczodrzynski.edziennik.data.db.modules.debuglog.DebugLog;
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore;
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile;
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull;
|
||||||
import pl.szczodrzynski.edziennik.network.NetworkUtils;
|
import pl.szczodrzynski.edziennik.network.NetworkUtils;
|
||||||
|
@ -83,7 +83,9 @@ import pl.szczodrzynski.edziennik.utils.Themes;
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils;
|
import pl.szczodrzynski.edziennik.utils.Utils;
|
||||||
import pl.szczodrzynski.edziennik.utils.models.AppConfig;
|
import pl.szczodrzynski.edziennik.utils.models.AppConfig;
|
||||||
|
|
||||||
|
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_LIBRUS;
|
||||||
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
|
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
|
||||||
|
import static pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore.LOGIN_TYPE_VULCAN;
|
||||||
|
|
||||||
public class App extends androidx.multidex.MultiDexApplication implements Configuration.Provider {
|
public class App extends androidx.multidex.MultiDexApplication implements Configuration.Provider {
|
||||||
private static final String TAG = "App";
|
private static final String TAG = "App";
|
||||||
|
@ -143,11 +145,6 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
//public Register register; // REGISTER for current profile, read from registerStore
|
//public Register register; // REGISTER for current profile, read from registerStore
|
||||||
|
|
||||||
public ProfileFull profile;
|
public ProfileFull profile;
|
||||||
public Config config;
|
|
||||||
private static Config mConfig;
|
|
||||||
public static Config getConfig() {
|
|
||||||
return mConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
// other stuff
|
// other stuff
|
||||||
public Gson gson;
|
public Gson gson;
|
||||||
|
@ -197,10 +194,6 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
gson = new Gson();
|
gson = new Gson();
|
||||||
networkUtils = new NetworkUtils(this);
|
networkUtils = new NetworkUtils(this);
|
||||||
|
|
||||||
config = new Config(db);
|
|
||||||
config.migrate(this);
|
|
||||||
mConfig = config;
|
|
||||||
|
|
||||||
Iconics.init(getApplicationContext());
|
Iconics.init(getApplicationContext());
|
||||||
Iconics.registerFont(SzkolnyFont.INSTANCE);
|
Iconics.registerFont(SzkolnyFont.INSTANCE);
|
||||||
|
|
||||||
|
@ -215,9 +208,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
|
|
||||||
loadConfig();
|
loadConfig();
|
||||||
|
|
||||||
Signing.INSTANCE.getCert(this);
|
Themes.INSTANCE.setThemeInt(appConfig.appTheme);
|
||||||
|
|
||||||
Themes.INSTANCE.setThemeInt(config.getUi().getTheme());
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
|
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
|
||||||
|
@ -225,7 +216,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
byte[] signatureBytes = signature.toByteArray();
|
byte[] signatureBytes = signature.toByteArray();
|
||||||
MessageDigest md = MessageDigest.getInstance("SHA");
|
MessageDigest md = MessageDigest.getInstance("SHA");
|
||||||
md.update(signatureBytes);
|
md.update(signatureBytes);
|
||||||
this.signature = Base64.encodeToString(md.digest(), Base64.NO_WRAP);
|
this.signature = Base64.encodeToString(md.digest(), Base64.DEFAULT);
|
||||||
//Log.d(TAG, "Signature is "+this.signature);
|
//Log.d(TAG, "Signature is "+this.signature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,7 +227,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
if ("f054761fbdb6a238".equals(deviceId) || BuildConfig.DEBUG) {
|
if ("f054761fbdb6a238".equals(deviceId) || BuildConfig.DEBUG) {
|
||||||
devMode = true;
|
devMode = true;
|
||||||
}
|
}
|
||||||
else if (config.getDevModePassword() != null) {
|
else if (appConfig.devModePassword != null) {
|
||||||
checkDevModePassword();
|
checkDevModePassword();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +298,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
|
|
||||||
//profileLoadById(appSharedPrefs.getInt("current_profile_id", 1));
|
//profileLoadById(appSharedPrefs.getInt("current_profile_id", 1));
|
||||||
|
|
||||||
if (config.getSync().getEnabled()) {
|
if (appConfig.registerSyncEnabled) {
|
||||||
SyncWorker.Companion.scheduleNext(this, false);
|
SyncWorker.Companion.scheduleNext(this, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -371,10 +362,11 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcutTimetable, shortcutAgenda, shortcutGrades, shortcutHomework, shortcutMessages));
|
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcutTimetable, shortcutAgenda, shortcutGrades, shortcutHomework, shortcutMessages));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.getAppInstalledTime() == 0) {
|
if (appConfig.appInstalledTime == 0) {
|
||||||
try {
|
try {
|
||||||
config.setAppInstalledTime(getPackageManager().getPackageInfo(getPackageName(), 0).firstInstallTime);
|
appConfig.appInstalledTime = getPackageManager().getPackageInfo(getPackageName(), 0).firstInstallTime;
|
||||||
config.setAppRateSnackbarTime(config.getAppInstalledTime() + 7 * 24 * 60 * 60 * 1000);
|
appConfig.appRateSnackbarTime = appConfig.appInstalledTime + 7 * 24 * 60 * 60 * 1000;
|
||||||
|
saveConfig("appInstalledTime", "appRateSnackbarTime");
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -442,9 +434,9 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
final long startTime = System.currentTimeMillis();
|
final long startTime = System.currentTimeMillis();
|
||||||
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(instanceIdResult -> {
|
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(instanceIdResult -> {
|
||||||
Log.d(TAG, "Token for App is " + instanceIdResult.getToken() + ", ID is " + instanceIdResult.getId()+". Time is "+(System.currentTimeMillis() - startTime));
|
Log.d(TAG, "Token for App is " + instanceIdResult.getToken() + ", ID is " + instanceIdResult.getId()+". Time is "+(System.currentTimeMillis() - startTime));
|
||||||
config.getSync().setTokenApp(instanceIdResult.getToken());
|
appConfig.fcmToken = instanceIdResult.getToken();
|
||||||
});
|
});
|
||||||
/*FirebaseInstanceId.getInstance(pushMobidziennikApp).getInstanceId().addOnSuccessListener(instanceIdResult -> {
|
FirebaseInstanceId.getInstance(pushMobidziennikApp).getInstanceId().addOnSuccessListener(instanceIdResult -> {
|
||||||
Log.d(TAG, "Token for Mobidziennik is " + instanceIdResult.getToken() + ", ID is " + instanceIdResult.getId());
|
Log.d(TAG, "Token for Mobidziennik is " + instanceIdResult.getToken() + ", ID is " + instanceIdResult.getId());
|
||||||
appConfig.fcmTokens.put(LOGIN_TYPE_MOBIDZIENNIK, new Pair<>(instanceIdResult.getToken(), new ArrayList<>()));
|
appConfig.fcmTokens.put(LOGIN_TYPE_MOBIDZIENNIK, new Pair<>(instanceIdResult.getToken(), new ArrayList<>()));
|
||||||
});
|
});
|
||||||
|
@ -458,7 +450,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
if (pair == null || pair.first == null || !pair.first.equals(instanceIdResult.getToken())) {
|
if (pair == null || pair.first == null || !pair.first.equals(instanceIdResult.getToken())) {
|
||||||
appConfig.fcmTokens.put(LOGIN_TYPE_VULCAN, new Pair<>(instanceIdResult.getToken(), new ArrayList<>()));
|
appConfig.fcmTokens.put(LOGIN_TYPE_VULCAN, new Pair<>(instanceIdResult.getToken(), new ArrayList<>()));
|
||||||
}
|
}
|
||||||
});*/
|
});
|
||||||
|
|
||||||
|
|
||||||
FirebaseMessaging.getInstance().subscribeToTopic(getPackageName());
|
FirebaseMessaging.getInstance().subscribeToTopic(getPackageName());
|
||||||
|
@ -521,8 +513,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (NoSuchFieldException e) {
|
} catch (NoSuchFieldException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Log.w(TAG, "Should remove app.appConfig."+fieldName);
|
appSharedPrefs.edit().remove("app.appConfig."+fieldName).apply();
|
||||||
//appSharedPrefs.edit().remove("app.appConfig."+fieldName).apply(); TODO migration
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -594,11 +585,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
//appSharedPrefs.edit().putString("config", gson.toJson(appConfig)).apply();
|
//appSharedPrefs.edit().putString("config", gson.toJson(appConfig)).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void profileSave() {
|
|
||||||
AsyncTask.execute(() -> {
|
|
||||||
db.profileDao().add(profile);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void profileSaveAsync() {
|
public void profileSaveAsync() {
|
||||||
AsyncTask.execute(() -> {
|
AsyncTask.execute(() -> {
|
||||||
|
@ -619,6 +606,14 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
db.profileDao().add(profileFull);
|
db.profileDao().add(profileFull);
|
||||||
db.loginStoreDao().add(profileFull);
|
db.loginStoreDao().add(profileFull);
|
||||||
}
|
}
|
||||||
|
public void profileSaveFull(Profile profile, LoginStore loginStore) {
|
||||||
|
db.profileDao().add(profile);
|
||||||
|
db.loginStoreDao().add(loginStore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProfileFull profileGetOrNull(int id) {
|
||||||
|
return db.profileDao().getFullByIdNow(id);
|
||||||
|
}
|
||||||
|
|
||||||
public void profileLoadById(int id) {
|
public void profileLoadById(int id) {
|
||||||
profileLoadById(id, false);
|
profileLoadById(id, false);
|
||||||
|
@ -641,7 +636,6 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
MainActivity.Companion.setUseOldMessages(profile.getLoginStoreType() == LOGIN_TYPE_MOBIDZIENNIK && appConfig.mobidziennikOldMessages == 1);
|
MainActivity.Companion.setUseOldMessages(profile.getLoginStoreType() == LOGIN_TYPE_MOBIDZIENNIK && appConfig.mobidziennikOldMessages == 1);
|
||||||
profileId = profile.getId();
|
profileId = profile.getId();
|
||||||
appSharedPrefs.edit().putInt("current_profile_id", profile.getId()).apply();
|
appSharedPrefs.edit().putInt("current_profile_id", profile.getId()).apply();
|
||||||
config.setProfile(profileId);
|
|
||||||
}
|
}
|
||||||
else if (!loadedLast) {
|
else if (!loadedLast) {
|
||||||
profileLoadById(profileLastId(), true);
|
profileLoadById(profileLastId(), true);
|
||||||
|
@ -712,7 +706,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config
|
||||||
|
|
||||||
public void checkDevModePassword() {
|
public void checkDevModePassword() {
|
||||||
try {
|
try {
|
||||||
devMode = Utils.AESCrypt.decrypt("nWFVxY65Pa8/aRrT7EylNAencmOD+IxUY2Gg/beiIWY=", config.getDevModePassword()).equals("ok here you go it's enabled now")
|
devMode = Utils.AESCrypt.decrypt("nWFVxY65Pa8/aRrT7EylNAencmOD+IxUY2Gg/beiIWY=", appConfig.devModePassword).equals("ok here you go it's enabled now")
|
||||||
|| BuildConfig.DEBUG;
|
|| BuildConfig.DEBUG;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -1,319 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-11-26.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik
|
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import androidx.work.Configuration
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlin.coroutines.CoroutineContext
|
|
||||||
|
|
||||||
class Szkolny : /*MultiDexApplication(),*/ Configuration.Provider, CoroutineScope {
|
|
||||||
companion object {
|
|
||||||
var devMode = false
|
|
||||||
}
|
|
||||||
|
|
||||||
//lateinit var db: AppDb
|
|
||||||
//val config by lazy { Config(db); // TODO migrate }
|
|
||||||
|
|
||||||
private val job = Job()
|
|
||||||
override val coroutineContext: CoroutineContext
|
|
||||||
get() = job + Dispatchers.Main
|
|
||||||
override fun getWorkManagerConfiguration() = Configuration.Builder()
|
|
||||||
.setMinimumLoggingLevel(Log.VERBOSE)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
/*val preferences by lazy { getSharedPreferences(getString(R.string.preference_file), Context.MODE_PRIVATE) }
|
|
||||||
val notifier by lazy { Notifier(this) }
|
|
||||||
val permissionChecker by lazy { PermissionChecker(this) }
|
|
||||||
|
|
||||||
lateinit var profile: ProfileFull
|
|
||||||
|
|
||||||
/* _ _ _______ _______ _____
|
|
||||||
| | | |__ __|__ __| __ \
|
|
||||||
| |__| | | | | | | |__) |
|
|
||||||
| __ | | | | | | ___/
|
|
||||||
| | | | | | | | | |
|
|
||||||
|_| |_| |_| |_| |*/
|
|
||||||
val http: OkHttpClient by lazy {
|
|
||||||
val builder = OkHttpClient.Builder()
|
|
||||||
.cache(null)
|
|
||||||
.followRedirects(true)
|
|
||||||
.followSslRedirects(true)
|
|
||||||
.retryOnConnectionFailure(true)
|
|
||||||
.cookieJar(cookieJar)
|
|
||||||
.connectTimeout(20, TimeUnit.SECONDS)
|
|
||||||
.writeTimeout(5, TimeUnit.SECONDS)
|
|
||||||
.readTimeout(10, TimeUnit.SECONDS)
|
|
||||||
builder.installHttpsSupport()
|
|
||||||
|
|
||||||
if (devMode || BuildConfig.DEBUG) {
|
|
||||||
HyperLog.initialize(this)
|
|
||||||
HyperLog.setLogLevel(Log.VERBOSE)
|
|
||||||
HyperLog.setLogFormat(DebugLogFormat(this))
|
|
||||||
val chuckerCollector = ChuckerCollector(this, true, Period.ONE_HOUR)
|
|
||||||
val chuckerInterceptor = ChuckerInterceptor(this, chuckerCollector)
|
|
||||||
builder.addInterceptor(chuckerInterceptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.build()
|
|
||||||
}
|
|
||||||
val httpLazy: OkHttpClient by lazy {
|
|
||||||
http.newBuilder()
|
|
||||||
.followRedirects(false)
|
|
||||||
.followSslRedirects(false)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
val cookieJar by lazy { PersistentCookieJar(SetCookieCache(), SharedPrefsCookiePersistor(this)) }
|
|
||||||
|
|
||||||
/* _____ _ _
|
|
||||||
/ ____(_) | |
|
|
||||||
| (___ _ __ _ _ __ __ _| |_ _ _ _ __ ___
|
|
||||||
\___ \| |/ _` | '_ \ / _` | __| | | | '__/ _ \
|
|
||||||
____) | | (_| | | | | (_| | |_| |_| | | | __/
|
|
||||||
|_____/|_|\__, |_| |_|\__,_|\__|\__,_|_| \___|
|
|
||||||
__/ |
|
|
||||||
|__*/
|
|
||||||
private val deviceId: String by lazy { Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID) ?: "" }
|
|
||||||
private val signature: String by lazy {
|
|
||||||
var str = ""
|
|
||||||
try {
|
|
||||||
val packageInfo: PackageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
|
|
||||||
for (signature in packageInfo.signatures) {
|
|
||||||
val signatureBytes = signature.toByteArray()
|
|
||||||
val md = MessageDigest.getInstance("SHA")
|
|
||||||
md.update(signatureBytes)
|
|
||||||
str = Base64.encodeToString(md.digest(), Base64.DEFAULT)
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
str
|
|
||||||
}
|
|
||||||
private var unreadBadgesAvailable = true
|
|
||||||
|
|
||||||
/* _____ _
|
|
||||||
/ ____| | |
|
|
||||||
___ _ __ | | _ __ ___ __ _| |_ ___
|
|
||||||
/ _ \| '_ \| | | '__/ _ \/ _` | __/ _ \
|
|
||||||
| (_) | | | | |____| | | __/ (_| | || __/
|
|
||||||
\___/|_| |_|\_____|_| \___|\__,_|\__\__*/
|
|
||||||
override fun onCreate() {
|
|
||||||
super.onCreate()
|
|
||||||
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
|
|
||||||
CaocConfig.Builder.create()
|
|
||||||
.backgroundMode(CaocConfig.BACKGROUND_MODE_SHOW_CUSTOM)
|
|
||||||
.enabled(true)
|
|
||||||
.showErrorDetails(true)
|
|
||||||
.showRestartButton(true)
|
|
||||||
.logErrorOnRestart(true)
|
|
||||||
.trackActivities(true)
|
|
||||||
.minTimeBetweenCrashesMs(60*1000)
|
|
||||||
.errorDrawable(R.drawable.ic_rip)
|
|
||||||
.restartActivity(MainActivity::class.java)
|
|
||||||
.errorActivity(CrashActivity::class.java)
|
|
||||||
.apply()
|
|
||||||
Iconics.init(applicationContext)
|
|
||||||
Iconics.registerFont(SzkolnyFont)
|
|
||||||
db = AppDb.getDatabase(this)
|
|
||||||
Themes.themeInt = config.ui.theme
|
|
||||||
MHttp.instance().customOkHttpClient(http)
|
|
||||||
|
|
||||||
devMode = "f054761fbdb6a238" == deviceId || BuildConfig.DEBUG
|
|
||||||
if (config.devModePassword != null)
|
|
||||||
checkDevModePassword()
|
|
||||||
|
|
||||||
Signing.getCert(this)
|
|
||||||
|
|
||||||
launch { async(Dispatchers.Default) {
|
|
||||||
if (config.sync.enabled) {
|
|
||||||
scheduleNext(this@App, false)
|
|
||||||
} else {
|
|
||||||
cancelNext(this@App)
|
|
||||||
}
|
|
||||||
|
|
||||||
db.metadataDao().countUnseen().observeForever { count: Int ->
|
|
||||||
if (unreadBadgesAvailable)
|
|
||||||
unreadBadgesAvailable = ShortcutBadger.applyCount(this@App, count)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
|
|
||||||
val shortcutManager = getSystemService(ShortcutManager::class.java)
|
|
||||||
|
|
||||||
val shortcutTimetable = ShortcutInfo.Builder(this@App, "item_timetable")
|
|
||||||
.setShortLabel(getString(R.string.shortcut_timetable)).setLongLabel(getString(R.string.shortcut_timetable))
|
|
||||||
.setIcon(Icon.createWithResource(this@App, R.mipmap.ic_shortcut_timetable))
|
|
||||||
.setIntent(Intent(Intent.ACTION_MAIN, null, this@App, MainActivity::class.java)
|
|
||||||
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_TIMETABLE))
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val shortcutAgenda = ShortcutInfo.Builder(this@App, "item_agenda")
|
|
||||||
.setShortLabel(getString(R.string.shortcut_agenda)).setLongLabel(getString(R.string.shortcut_agenda))
|
|
||||||
.setIcon(Icon.createWithResource(this@App, R.mipmap.ic_shortcut_agenda))
|
|
||||||
.setIntent(Intent(Intent.ACTION_MAIN, null, this@App, MainActivity::class.java)
|
|
||||||
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_AGENDA))
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val shortcutGrades = ShortcutInfo.Builder(this@App, "item_grades")
|
|
||||||
.setShortLabel(getString(R.string.shortcut_grades)).setLongLabel(getString(R.string.shortcut_grades))
|
|
||||||
.setIcon(Icon.createWithResource(this@App, R.mipmap.ic_shortcut_grades))
|
|
||||||
.setIntent(Intent(Intent.ACTION_MAIN, null, this@App, MainActivity::class.java)
|
|
||||||
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_GRADES))
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val shortcutHomework = ShortcutInfo.Builder(this@App, "item_homeworks")
|
|
||||||
.setShortLabel(getString(R.string.shortcut_homework)).setLongLabel(getString(R.string.shortcut_homework))
|
|
||||||
.setIcon(Icon.createWithResource(this@App, R.mipmap.ic_shortcut_homework))
|
|
||||||
.setIntent(Intent(Intent.ACTION_MAIN, null, this@App, MainActivity::class.java)
|
|
||||||
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_HOMEWORK))
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val shortcutMessages = ShortcutInfo.Builder(this@App, "item_messages")
|
|
||||||
.setShortLabel(getString(R.string.shortcut_messages)).setLongLabel(getString(R.string.shortcut_messages))
|
|
||||||
.setIcon(Icon.createWithResource(this@App, R.mipmap.ic_shortcut_messages))
|
|
||||||
.setIntent(Intent(Intent.ACTION_MAIN, null, this@App, MainActivity::class.java)
|
|
||||||
.putExtra("fragmentId", MainActivity.DRAWER_ITEM_MESSAGES))
|
|
||||||
.build()
|
|
||||||
|
|
||||||
shortcutManager.dynamicShortcuts = listOf(
|
|
||||||
shortcutTimetable,
|
|
||||||
shortcutAgenda,
|
|
||||||
shortcutGrades,
|
|
||||||
shortcutHomework,
|
|
||||||
shortcutMessages
|
|
||||||
)
|
|
||||||
} // shortcuts - end
|
|
||||||
|
|
||||||
if (config.appInstalledTime == 0L)
|
|
||||||
try {
|
|
||||||
config.appInstalledTime = packageManager.getPackageInfo(packageName, 0).firstInstallTime
|
|
||||||
config.appRateSnackbarTime = config.appInstalledTime + 7*DAY*MS
|
|
||||||
} catch (e: NameNotFoundException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
|
|
||||||
val pushMobidziennikApp = FirebaseApp.initializeApp(
|
|
||||||
this@App,
|
|
||||||
FirebaseOptions.Builder()
|
|
||||||
.setApiKey("AIzaSyCi5LmsZ5BBCQnGtrdvWnp1bWLCNP8OWQE")
|
|
||||||
.setApplicationId("1:747285019373:android:f6341bf7b158621d")
|
|
||||||
.build(),
|
|
||||||
"Mobidziennik2"
|
|
||||||
)
|
|
||||||
|
|
||||||
val pushLibrusApp = FirebaseApp.initializeApp(
|
|
||||||
this@App,
|
|
||||||
FirebaseOptions.Builder()
|
|
||||||
.setApiKey("AIzaSyDfTuEoYPKdv4aceEws1CO3n0-HvTndz-o")
|
|
||||||
.setApplicationId("1:513056078587:android:1e29083b760af544")
|
|
||||||
.build(),
|
|
||||||
"Librus"
|
|
||||||
)
|
|
||||||
|
|
||||||
val pushVulcanApp = FirebaseApp.initializeApp(
|
|
||||||
this@App,
|
|
||||||
FirebaseOptions.Builder()
|
|
||||||
.setApiKey("AIzaSyDW8MUtanHy64_I0oCpY6cOxB3jrvJd_iA")
|
|
||||||
.setApplicationId("1:987828170337:android:ac97431a0a4578c3")
|
|
||||||
.build(),
|
|
||||||
"Vulcan"
|
|
||||||
)
|
|
||||||
|
|
||||||
try {
|
|
||||||
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener { instanceIdResult ->
|
|
||||||
val token = instanceIdResult.token
|
|
||||||
config.sync.tokenApp = token
|
|
||||||
}
|
|
||||||
FirebaseInstanceId.getInstance(pushMobidziennikApp).instanceId.addOnSuccessListener { instanceIdResult ->
|
|
||||||
val token = instanceIdResult.token
|
|
||||||
if (token != config.sync.tokenMobidziennik) {
|
|
||||||
config.sync.tokenMobidziennik = token
|
|
||||||
config.sync.tokenMobidziennikList = listOf()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FirebaseInstanceId.getInstance(pushLibrusApp).instanceId.addOnSuccessListener { instanceIdResult ->
|
|
||||||
val token = instanceIdResult.token
|
|
||||||
if (token != config.sync.tokenLibrus) {
|
|
||||||
config.sync.tokenLibrus = token
|
|
||||||
config.sync.tokenLibrusList = listOf()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FirebaseInstanceId.getInstance(pushVulcanApp).instanceId.addOnSuccessListener { instanceIdResult ->
|
|
||||||
val token = instanceIdResult.token
|
|
||||||
if (token != config.sync.tokenVulcan) {
|
|
||||||
config.sync.tokenVulcan = token
|
|
||||||
config.sync.tokenVulcanList = listOf()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FirebaseMessaging.getInstance().subscribeToTopic(packageName)
|
|
||||||
} catch (e: IllegalStateException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun profileLoad(profileId: Int) {
|
|
||||||
db.profileDao().getFullByIdNow(profileId)?.also {
|
|
||||||
profile = it
|
|
||||||
} ?: run {
|
|
||||||
if (!::profile.isInitialized) {
|
|
||||||
profile = ProfileFull(-1, "", "", -1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fun profileLoad(profileId: Int, onSuccess: (profile: ProfileFull) -> Unit) {
|
|
||||||
launch {
|
|
||||||
val deferred = async(Dispatchers.Default) {
|
|
||||||
profileLoad(profileId)
|
|
||||||
}
|
|
||||||
deferred.await()
|
|
||||||
onSuccess(profile)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun OkHttpClient.Builder.installHttpsSupport() {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
|
|
||||||
try {
|
|
||||||
try {
|
|
||||||
ProviderInstaller.installIfNeeded(this@App)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e("OkHttpTLSCompat", "Play Services not found or outdated")
|
|
||||||
|
|
||||||
val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
|
|
||||||
trustManagerFactory.init(null as KeyStore?)
|
|
||||||
|
|
||||||
val x509TrustManager = trustManagerFactory.trustManagers.singleOrNull { it is X509TrustManager } as X509TrustManager?
|
|
||||||
?: return
|
|
||||||
|
|
||||||
val sc = SSLContext.getInstance("TLSv1.2")
|
|
||||||
sc.init(null, null, null)
|
|
||||||
sslSocketFactory(TLSSocketFactory(sc.socketFactory), x509TrustManager)
|
|
||||||
val cs: ConnectionSpec = ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
|
|
||||||
.tlsVersions(TlsVersion.TLS_1_0)
|
|
||||||
.tlsVersions(TlsVersion.TLS_1_1)
|
|
||||||
.tlsVersions(TlsVersion.TLS_1_2)
|
|
||||||
.build()
|
|
||||||
val specs: MutableList<ConnectionSpec> = ArrayList()
|
|
||||||
specs.add(cs)
|
|
||||||
specs.add(ConnectionSpec.COMPATIBLE_TLS)
|
|
||||||
specs.add(ConnectionSpec.CLEARTEXT)
|
|
||||||
connectionSpecs(specs)
|
|
||||||
}
|
|
||||||
} catch (exc: Exception) {
|
|
||||||
Log.e("OkHttpTLSCompat", "Error while setting TLS 1.2", exc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkDevModePassword() {
|
|
||||||
devMode = try {
|
|
||||||
Utils.AESCrypt.decrypt("nWFVxY65Pa8/aRrT7EylNAencmOD+IxUY2Gg/beiIWY=", config.devModePassword) == "ok here you go it's enabled now" || BuildConfig.DEBUG
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
|
@ -5,8 +5,6 @@ import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.graphics.PorterDuff
|
|
||||||
import android.graphics.PorterDuffColorFilter
|
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
@ -15,8 +13,6 @@ import android.text.*
|
||||||
import android.text.style.ForegroundColorSpan
|
import android.text.style.ForegroundColorSpan
|
||||||
import android.text.style.StrikethroughSpan
|
import android.text.style.StrikethroughSpan
|
||||||
import android.text.style.StyleSpan
|
import android.text.style.StyleSpan
|
||||||
import android.util.Base64.NO_WRAP
|
|
||||||
import android.util.Base64.encodeToString
|
|
||||||
import android.util.LongSparseArray
|
import android.util.LongSparseArray
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
|
@ -36,20 +32,15 @@ import im.wangchao.mhttp.Response
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import okhttp3.RequestBody
|
|
||||||
import okio.Buffer
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
|
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Time
|
import pl.szczodrzynski.edziennik.utils.models.Time
|
||||||
|
import pl.szczodrzynski.navlib.R
|
||||||
import pl.szczodrzynski.navlib.getColorFromRes
|
import pl.szczodrzynski.navlib.getColorFromRes
|
||||||
import java.math.BigInteger
|
|
||||||
import java.security.MessageDigest
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.zip.CRC32
|
import java.util.zip.CRC32
|
||||||
import javax.crypto.Mac
|
|
||||||
import javax.crypto.spec.SecretKeySpec
|
|
||||||
|
|
||||||
|
|
||||||
fun List<Teacher>.byId(id: Long) = firstOrNull { it.id == id }
|
fun List<Teacher>.byId(id: Long) = firstOrNull { it.id == id }
|
||||||
|
@ -112,13 +103,15 @@ fun String.swapFirstLastName(): String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.splitName(): Pair<String, String>? {
|
fun String.getFirstLastName(): Pair<String, String>? {
|
||||||
return this.split(" ").let {
|
return this.split(" ").let {
|
||||||
if (it.size >= 2) Pair(it[0], it[1])
|
if (it.size >= 2) Pair(it[0], it[1])
|
||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun String.getLastFirstName() = this.getFirstLastName()
|
||||||
|
|
||||||
fun changeStringCase(s: String): String {
|
fun changeStringCase(s: String): String {
|
||||||
val delimiters = " '-/"
|
val delimiters = " '-/"
|
||||||
val sb = StringBuilder()
|
val sb = StringBuilder()
|
||||||
|
@ -177,20 +170,6 @@ fun colorFromName(context: Context, name: String?): Int {
|
||||||
return context.getColorFromRes(color)
|
return context.getColorFromRes(color)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun colorFromCssName(name: String): Int {
|
|
||||||
return when (name) {
|
|
||||||
"red" -> 0xffff0000
|
|
||||||
"green" -> 0xff008000
|
|
||||||
"blue" -> 0xff0000ff
|
|
||||||
"violet" -> 0xffee82ee
|
|
||||||
"brown" -> 0xffa52a2a
|
|
||||||
"orange" -> 0xffffa500
|
|
||||||
"black" -> 0xff000000
|
|
||||||
"white" -> 0xffffffff
|
|
||||||
else -> -1
|
|
||||||
}.toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun MutableList<Profile>.filterOutArchived(): MutableList<Profile> {
|
fun MutableList<Profile>.filterOutArchived(): MutableList<Profile> {
|
||||||
this.removeAll { it.archived }
|
this.removeAll { it.archived }
|
||||||
return this
|
return this
|
||||||
|
@ -222,7 +201,6 @@ const val DAY = 24L*HOUR
|
||||||
const val WEEK = 7L*DAY
|
const val WEEK = 7L*DAY
|
||||||
const val MONTH = 30L*DAY
|
const val MONTH = 30L*DAY
|
||||||
const val YEAR = 365L*DAY
|
const val YEAR = 365L*DAY
|
||||||
const val MS = 1000L
|
|
||||||
|
|
||||||
fun <T> LongSparseArray<T>.values(): List<T> {
|
fun <T> LongSparseArray<T>.values(): List<T> {
|
||||||
val result = mutableListOf<T>()
|
val result = mutableListOf<T>()
|
||||||
|
@ -377,34 +355,6 @@ fun String.crc32(): Long {
|
||||||
return crc.value
|
return crc.value
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.hmacSHA1(password: String): String {
|
|
||||||
val key = SecretKeySpec(password.toByteArray(), "HmacSHA1")
|
|
||||||
|
|
||||||
val mac = Mac.getInstance("HmacSHA1").apply {
|
|
||||||
init(key)
|
|
||||||
update(this@hmacSHA1.toByteArray())
|
|
||||||
}
|
|
||||||
|
|
||||||
return encodeToString(mac.doFinal(), NO_WRAP)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun String.md5(): String {
|
|
||||||
val md = MessageDigest.getInstance("MD5")
|
|
||||||
return BigInteger(1, md.digest(toByteArray())).toString(16).padStart(32, '0')
|
|
||||||
}
|
|
||||||
|
|
||||||
fun String.sha256(): ByteArray {
|
|
||||||
val md = MessageDigest.getInstance("SHA-256")
|
|
||||||
md.update(toByteArray())
|
|
||||||
return md.digest()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun RequestBody.bodyToString(): String {
|
|
||||||
val buffer = Buffer()
|
|
||||||
writeTo(buffer)
|
|
||||||
return buffer.readUtf8()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Long.formatDate(format: String = "yyyy-MM-dd HH:mm:ss"): String = SimpleDateFormat(format).format(this)
|
fun Long.formatDate(format: String = "yyyy-MM-dd HH:mm:ss"): String = SimpleDateFormat(format).format(this)
|
||||||
|
|
||||||
fun CharSequence?.asColoredSpannable(colorInt: Int): Spannable {
|
fun CharSequence?.asColoredSpannable(colorInt: Int): Spannable {
|
||||||
|
@ -429,13 +379,13 @@ fun CharSequence?.asItalicSpannable(): Spannable {
|
||||||
*/
|
*/
|
||||||
fun <T : CharSequence> listOfNotEmpty(vararg elements: T): List<T> = elements.filterNot { it.isEmpty() }
|
fun <T : CharSequence> listOfNotEmpty(vararg elements: T): List<T> = elements.filterNot { it.isEmpty() }
|
||||||
|
|
||||||
fun List<CharSequence?>.concat(delimiter: String? = null): CharSequence {
|
fun List<CharSequence>.concat(delimiter: String? = null): CharSequence {
|
||||||
if (this.isEmpty()) {
|
if (this.isEmpty()) {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.size == 1) {
|
if (this.size == 1) {
|
||||||
return this[0] ?: ""
|
return this[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
var spanned = false
|
var spanned = false
|
||||||
|
@ -450,8 +400,6 @@ fun List<CharSequence?>.concat(delimiter: String? = null): CharSequence {
|
||||||
if (spanned) {
|
if (spanned) {
|
||||||
val ssb = SpannableStringBuilder()
|
val ssb = SpannableStringBuilder()
|
||||||
for (piece in this) {
|
for (piece in this) {
|
||||||
if (piece == null)
|
|
||||||
continue
|
|
||||||
if (!first && delimiter != null)
|
if (!first && delimiter != null)
|
||||||
ssb.append(delimiter)
|
ssb.append(delimiter)
|
||||||
first = false
|
first = false
|
||||||
|
@ -461,8 +409,6 @@ fun List<CharSequence?>.concat(delimiter: String? = null): CharSequence {
|
||||||
} else {
|
} else {
|
||||||
val sb = StringBuilder()
|
val sb = StringBuilder()
|
||||||
for (piece in this) {
|
for (piece in this) {
|
||||||
if (piece == null)
|
|
||||||
continue
|
|
||||||
if (!first && delimiter != null)
|
if (!first && delimiter != null)
|
||||||
sb.append(delimiter)
|
sb.append(delimiter)
|
||||||
first = false
|
first = false
|
||||||
|
@ -587,98 +533,3 @@ operator fun Time?.compareTo(other: Time?): Int {
|
||||||
operator fun StringBuilder.plusAssign(str: String?) {
|
operator fun StringBuilder.plusAssign(str: String?) {
|
||||||
this.append(str)
|
this.append(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.timeTill(time: Int, delimiter: String = " ", countInSeconds: Boolean = false): String {
|
|
||||||
val parts = mutableListOf<Pair<Int, Int>>()
|
|
||||||
|
|
||||||
val hours = time / 3600
|
|
||||||
val minutes = (time - hours*3600) / 60
|
|
||||||
val seconds = time - minutes*60 - hours*3600
|
|
||||||
|
|
||||||
if (!countInSeconds) {
|
|
||||||
var prefixAdded = false
|
|
||||||
if (hours > 0) {
|
|
||||||
if (!prefixAdded) parts += R.plurals.time_till_text to hours
|
|
||||||
prefixAdded = true
|
|
||||||
parts += R.plurals.time_till_hours to hours
|
|
||||||
}
|
|
||||||
if (minutes > 0) {
|
|
||||||
if (!prefixAdded) parts += R.plurals.time_till_text to minutes
|
|
||||||
prefixAdded = true
|
|
||||||
parts += R.plurals.time_till_minutes to minutes
|
|
||||||
}
|
|
||||||
if (hours == 0 && minutes < 10) {
|
|
||||||
if (!prefixAdded) parts += R.plurals.time_till_text to seconds
|
|
||||||
prefixAdded = true
|
|
||||||
parts += R.plurals.time_till_seconds to seconds
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
parts += R.plurals.time_till_text to time
|
|
||||||
parts += R.plurals.time_till_seconds to time
|
|
||||||
}
|
|
||||||
|
|
||||||
return parts.joinToString(delimiter) { resources.getQuantityString(it.first, it.second, it.second) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Context.timeLeft(time: Int, delimiter: String = " ", countInSeconds: Boolean = false): String {
|
|
||||||
val parts = mutableListOf<Pair<Int, Int>>()
|
|
||||||
|
|
||||||
val hours = time / 3600
|
|
||||||
val minutes = (time - hours*3600) / 60
|
|
||||||
val seconds = time - minutes*60 - hours*3600
|
|
||||||
|
|
||||||
if (!countInSeconds) {
|
|
||||||
var prefixAdded = false
|
|
||||||
if (hours > 0) {
|
|
||||||
if (!prefixAdded) parts += R.plurals.time_left_text to hours
|
|
||||||
prefixAdded = true
|
|
||||||
parts += R.plurals.time_left_hours to hours
|
|
||||||
}
|
|
||||||
if (minutes > 0) {
|
|
||||||
if (!prefixAdded) parts += R.plurals.time_left_text to minutes
|
|
||||||
prefixAdded = true
|
|
||||||
parts += R.plurals.time_left_minutes to minutes
|
|
||||||
}
|
|
||||||
if (hours == 0 && minutes < 10) {
|
|
||||||
if (!prefixAdded) parts += R.plurals.time_left_text to seconds
|
|
||||||
prefixAdded = true
|
|
||||||
parts += R.plurals.time_left_seconds to seconds
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
parts += R.plurals.time_left_text to time
|
|
||||||
parts += R.plurals.time_left_seconds to time
|
|
||||||
}
|
|
||||||
|
|
||||||
return parts.joinToString(delimiter) { resources.getQuantityString(it.first, it.second, it.second) }
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified T> Any?.instanceOfOrNull(): T? {
|
|
||||||
return when (this) {
|
|
||||||
is T -> this
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Drawable.setTintColor(color: Int): Drawable {
|
|
||||||
colorFilter = PorterDuffColorFilter(
|
|
||||||
color,
|
|
||||||
PorterDuff.Mode.SRC_ATOP
|
|
||||||
)
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <T> List<T>.ifNotEmpty(block: (List<T>) -> Unit) {
|
|
||||||
if (!isEmpty())
|
|
||||||
block(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
val String.firstLettersName: String
|
|
||||||
get() {
|
|
||||||
var nameShort = ""
|
|
||||||
this.split(" ").forEach {
|
|
||||||
if (it.isBlank())
|
|
||||||
return@forEach
|
|
||||||
nameShort += it[0].toLowerCase()
|
|
||||||
}
|
|
||||||
return nameShort
|
|
||||||
}
|
|
||||||
|
|
|
@ -11,7 +11,6 @@ import android.graphics.BitmapFactory
|
||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.os.*
|
import android.os.*
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.util.Log
|
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
@ -37,9 +36,8 @@ import org.greenrobot.eventbus.Subscribe
|
||||||
import org.greenrobot.eventbus.ThreadMode
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
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.data.api.events.*
|
import pl.szczodrzynski.edziennik.api.v2.events.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.Signing
|
import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask
|
||||||
import pl.szczodrzynski.edziennik.data.api.task.EdziennikTask
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.*
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.*
|
||||||
import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding
|
import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding
|
||||||
import pl.szczodrzynski.edziennik.network.ServerRequest
|
import pl.szczodrzynski.edziennik.network.ServerRequest
|
||||||
|
@ -58,7 +56,7 @@ import pl.szczodrzynski.edziennik.ui.modules.feedback.FeedbackFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.feedback.HelpFragment
|
import pl.szczodrzynski.edziennik.ui.modules.feedback.HelpFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.grades.GradesFragment
|
import pl.szczodrzynski.edziennik.ui.modules.grades.GradesFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.grades.editor.GradesEditorFragment
|
import pl.szczodrzynski.edziennik.ui.modules.grades.editor.GradesEditorFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragment
|
import pl.szczodrzynski.edziennik.ui.modules.home.HomeFragmentV2
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.homework.HomeworkFragment
|
import pl.szczodrzynski.edziennik.ui.modules.homework.HomeworkFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity
|
import pl.szczodrzynski.edziennik.ui.modules.login.LoginActivity
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.messages.MessageFragment
|
import pl.szczodrzynski.edziennik.ui.modules.messages.MessageFragment
|
||||||
|
@ -67,14 +65,12 @@ import pl.szczodrzynski.edziennik.ui.modules.notifications.NotificationsFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.settings.ProfileManagerFragment
|
import pl.szczodrzynski.edziennik.ui.modules.settings.ProfileManagerFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsNewFragment
|
import pl.szczodrzynski.edziennik.ui.modules.settings.SettingsNewFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.timetable.v2.TimetableFragment
|
import pl.szczodrzynski.edziennik.ui.modules.timetable.v2.TimetableFragment
|
||||||
import pl.szczodrzynski.edziennik.ui.modules.webpush.WebPushFragment
|
|
||||||
import pl.szczodrzynski.edziennik.utils.SwipeRefreshLayoutNoTouch
|
import pl.szczodrzynski.edziennik.utils.SwipeRefreshLayoutNoTouch
|
||||||
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 pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.dpToPx
|
import pl.szczodrzynski.edziennik.utils.Utils.dpToPx
|
||||||
import pl.szczodrzynski.edziennik.utils.appManagerIntentList
|
import pl.szczodrzynski.edziennik.utils.appManagerIntentList
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
|
||||||
import pl.szczodrzynski.edziennik.utils.models.NavTarget
|
import pl.szczodrzynski.edziennik.utils.models.NavTarget
|
||||||
import pl.szczodrzynski.navlib.*
|
import pl.szczodrzynski.navlib.*
|
||||||
import pl.szczodrzynski.navlib.SystemBarsUtil.Companion.COLOR_HALF_TRANSPARENT
|
import pl.szczodrzynski.navlib.SystemBarsUtil.Companion.COLOR_HALF_TRANSPARENT
|
||||||
|
@ -119,7 +115,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
const val TARGET_HELP = 502
|
const val TARGET_HELP = 502
|
||||||
const val TARGET_FEEDBACK = 120
|
const val TARGET_FEEDBACK = 120
|
||||||
const val TARGET_MESSAGES_DETAILS = 503
|
const val TARGET_MESSAGES_DETAILS = 503
|
||||||
const val TARGET_WEB_PUSH = 140
|
|
||||||
|
|
||||||
const val HOME_ID = DRAWER_ITEM_HOME
|
const val HOME_ID = DRAWER_ITEM_HOME
|
||||||
|
|
||||||
|
@ -127,7 +122,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
val list: MutableList<NavTarget> = mutableListOf()
|
val list: MutableList<NavTarget> = mutableListOf()
|
||||||
|
|
||||||
// home item
|
// home item
|
||||||
list += NavTarget(DRAWER_ITEM_HOME, R.string.menu_home_page, HomeFragment::class)
|
list += NavTarget(DRAWER_ITEM_HOME, R.string.menu_home_page, HomeFragmentV2::class)
|
||||||
.withTitle(R.string.app_name)
|
.withTitle(R.string.app_name)
|
||||||
.withIcon(CommunityMaterial.Icon2.cmd_home_outline)
|
.withIcon(CommunityMaterial.Icon2.cmd_home_outline)
|
||||||
.isInDrawer(true)
|
.isInDrawer(true)
|
||||||
|
@ -211,7 +206,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
list += NavTarget(TARGET_HELP, R.string.menu_help, HelpFragment::class)
|
list += NavTarget(TARGET_HELP, R.string.menu_help, HelpFragment::class)
|
||||||
list += NavTarget(TARGET_FEEDBACK, R.string.menu_feedback, FeedbackFragment::class)
|
list += NavTarget(TARGET_FEEDBACK, R.string.menu_feedback, FeedbackFragment::class)
|
||||||
list += NavTarget(TARGET_MESSAGES_DETAILS, R.string.menu_message, MessageFragment::class)
|
list += NavTarget(TARGET_MESSAGES_DETAILS, R.string.menu_message, MessageFragment::class)
|
||||||
list += NavTarget(TARGET_WEB_PUSH, R.string.menu_web_push, WebPushFragment::class)
|
|
||||||
list += NavTarget(DRAWER_ITEM_DEBUG, R.string.menu_debug, DebugFragment::class)
|
list += NavTarget(DRAWER_ITEM_DEBUG, R.string.menu_debug, DebugFragment::class)
|
||||||
|
|
||||||
list
|
list
|
||||||
|
@ -232,7 +226,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private val fragmentManager by lazy { supportFragmentManager }
|
private val fragmentManager by lazy { supportFragmentManager }
|
||||||
private lateinit var navTarget: NavTarget
|
private lateinit var navTarget: NavTarget
|
||||||
val navTargetId
|
private val navTargetId
|
||||||
get() = navTarget.id
|
get() = navTarget.id
|
||||||
|
|
||||||
private val navBackStack = mutableListOf<NavTarget>()
|
private val navBackStack = mutableListOf<NavTarget>()
|
||||||
|
@ -249,14 +243,12 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
setTheme(Themes.appTheme)
|
setTheme(Themes.appTheme)
|
||||||
|
|
||||||
app.config.ui.language?.let {
|
app.appConfig.language?.let {
|
||||||
setLanguage(it)
|
setLanguage(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
setContentView(b.root)
|
setContentView(b.root)
|
||||||
|
|
||||||
Log.d(TAG, Signing.appPassword)
|
|
||||||
|
|
||||||
errorSnackbar.setCoordinator(b.navView.coordinator, b.navView.bottomBar)
|
errorSnackbar.setCoordinator(b.navView.coordinator, b.navView.bottomBar)
|
||||||
|
|
||||||
navLoading = true
|
navLoading = true
|
||||||
|
@ -314,10 +306,10 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
drawer.apply {
|
drawer.apply {
|
||||||
setAccountHeaderBackground(app.config.ui.headerBackground)
|
setAccountHeaderBackground(app.appConfig.headerBackground)
|
||||||
|
|
||||||
drawerProfileListEmptyListener = {
|
drawerProfileListEmptyListener = {
|
||||||
app.config.loginFinished = false
|
app.appConfig.loginFinished = false
|
||||||
app.saveConfig("loginFinished")
|
app.saveConfig("loginFinished")
|
||||||
profileListEmptyListener()
|
profileListEmptyListener()
|
||||||
}
|
}
|
||||||
|
@ -342,7 +334,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
drawerProfileSettingClickListener = this@MainActivity.profileSettingClickListener
|
drawerProfileSettingClickListener = this@MainActivity.profileSettingClickListener
|
||||||
|
|
||||||
miniDrawerVisibleLandscape = null
|
miniDrawerVisibleLandscape = null
|
||||||
miniDrawerVisiblePortrait = app.config.ui.miniMenuVisible
|
miniDrawerVisiblePortrait = app.appConfig.miniDrawerVisible
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,37 +387,29 @@ class MainActivity : AppCompatActivity() {
|
||||||
SyncWorker.scheduleNext(app)
|
SyncWorker.scheduleNext(app)
|
||||||
|
|
||||||
// APP BACKGROUND
|
// APP BACKGROUND
|
||||||
if (app.config.ui.appBackground != null) {
|
if (app.appConfig.appBackground != null) {
|
||||||
try {
|
try {
|
||||||
app.config.ui.appBackground?.let {
|
var bg = app.appConfig.appBackground
|
||||||
var bg = it
|
val bgDir = File(Environment.getExternalStoragePublicDirectory("Szkolny.eu"), "bg")
|
||||||
val bgDir = File(Environment.getExternalStoragePublicDirectory("Szkolny.eu"), "bg")
|
if (bgDir.exists()) {
|
||||||
if (bgDir.exists()) {
|
val files = bgDir.listFiles()
|
||||||
val files = bgDir.listFiles()
|
val r = Random()
|
||||||
val r = Random()
|
val i = r.nextInt(files.size)
|
||||||
val i = r.nextInt(files.size)
|
bg = files[i].toString()
|
||||||
bg = files[i].toString()
|
}
|
||||||
}
|
val linearLayout = b.root
|
||||||
val linearLayout = b.root
|
if (bg.endsWith(".gif")) {
|
||||||
if (bg.endsWith(".gif")) {
|
linearLayout.background = GifDrawable(bg)
|
||||||
linearLayout.background = GifDrawable(bg)
|
} else {
|
||||||
} else {
|
linearLayout.background = BitmapDrawable.createFromPath(bg)
|
||||||
linearLayout.background = BitmapDrawable.createFromPath(bg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// IT'S WINTER MY DUDES
|
|
||||||
val today = Date.getToday()
|
|
||||||
if ((today.month == 12 || today.month == 1) && app.config.ui.snowfall) {
|
|
||||||
b.rootFrame.addView(layoutInflater.inflate(R.layout.snowfall, b.rootFrame, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHAT'S NEW DIALOG
|
// WHAT'S NEW DIALOG
|
||||||
if (app.config.appVersion < BuildConfig.VERSION_CODE) {
|
if (app.appConfig.lastAppVersion != BuildConfig.VERSION_CODE) {
|
||||||
ServerRequest(app, app.requestScheme + APP_URL + "main.php?just_updated", "MainActivity/JU")
|
ServerRequest(app, app.requestScheme + APP_URL + "main.php?just_updated", "MainActivity/JU")
|
||||||
.run { e, result ->
|
.run { e, result ->
|
||||||
Handler(Looper.getMainLooper()).post {
|
Handler(Looper.getMainLooper()).post {
|
||||||
|
@ -436,16 +420,17 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (app.config.appVersion < 170) {
|
if (app.appConfig.lastAppVersion < 170) {
|
||||||
//Intent intent = new Intent(this, ChangelogIntroActivity.class);
|
//Intent intent = new Intent(this, ChangelogIntroActivity.class);
|
||||||
//startActivity(intent);
|
//startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
app.config.appVersion = BuildConfig.VERSION_CODE
|
app.appConfig.lastAppVersion = BuildConfig.VERSION_CODE
|
||||||
|
app.saveConfig("lastAppVersion")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RATE SNACKBAR
|
// RATE SNACKBAR
|
||||||
if (app.config.appRateSnackbarTime != 0L && app.config.appRateSnackbarTime <= System.currentTimeMillis()) {
|
if (app.appConfig.appRateSnackbarTime != 0L && app.appConfig.appRateSnackbarTime <= System.currentTimeMillis()) {
|
||||||
navView.coordinator.postDelayed({
|
navView.coordinator.postDelayed({
|
||||||
CafeBar.builder(this)
|
CafeBar.builder(this)
|
||||||
.content(R.string.rate_snackbar_text)
|
.content(R.string.rate_snackbar_text)
|
||||||
|
@ -459,17 +444,20 @@ class MainActivity : AppCompatActivity() {
|
||||||
.onPositive { cafeBar ->
|
.onPositive { cafeBar ->
|
||||||
Utils.openGooglePlay(this)
|
Utils.openGooglePlay(this)
|
||||||
cafeBar.dismiss()
|
cafeBar.dismiss()
|
||||||
app.config.appRateSnackbarTime = 0
|
app.appConfig.appRateSnackbarTime = 0
|
||||||
|
app.saveConfig("appRateSnackbarTime")
|
||||||
}
|
}
|
||||||
.onNegative { cafeBar ->
|
.onNegative { cafeBar ->
|
||||||
Toast.makeText(this, "Szkoda, opinie innych pomagają mi rozwijać aplikację.", Toast.LENGTH_LONG).show()
|
Toast.makeText(this, "Szkoda, opinie innych pomagają mi rozwijać aplikację.", Toast.LENGTH_LONG).show()
|
||||||
cafeBar.dismiss()
|
cafeBar.dismiss()
|
||||||
app.config.appRateSnackbarTime = 0
|
app.appConfig.appRateSnackbarTime = 0
|
||||||
|
app.saveConfig("appRateSnackbarTime")
|
||||||
}
|
}
|
||||||
.onNeutral { cafeBar ->
|
.onNeutral { cafeBar ->
|
||||||
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show()
|
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show()
|
||||||
cafeBar.dismiss()
|
cafeBar.dismiss()
|
||||||
app.config.appRateSnackbarTime = System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000
|
app.appConfig.appRateSnackbarTime = System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000
|
||||||
|
app.saveConfig("appRateSnackbarTime")
|
||||||
}
|
}
|
||||||
.autoDismiss(false)
|
.autoDismiss(false)
|
||||||
.swipeToDismiss(true)
|
.swipeToDismiss(true)
|
||||||
|
@ -701,13 +689,14 @@ class MainActivity : AppCompatActivity() {
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
if (navLoading) {
|
if (navLoading) {
|
||||||
|
navLoading = false
|
||||||
b.fragment.removeAllViews()
|
b.fragment.removeAllViews()
|
||||||
if (intentTargetId == -1)
|
if (intentTargetId == -1)
|
||||||
intentTargetId = HOME_ID
|
intentTargetId = HOME_ID
|
||||||
}
|
}
|
||||||
|
|
||||||
when {
|
when {
|
||||||
app.profile == null || app.profile.id == -1 -> {
|
app.profile == null -> {
|
||||||
if (intentProfileId == -1)
|
if (intentProfileId == -1)
|
||||||
intentProfileId = app.appSharedPrefs.getInt("current_profile_id", 1)
|
intentProfileId = app.appSharedPrefs.getInt("current_profile_id", 1)
|
||||||
loadProfile(intentProfileId, intentTargetId, extras)
|
loadProfile(intentProfileId, intentTargetId, extras)
|
||||||
|
@ -720,14 +709,13 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
intentTargetId != -1 -> {
|
intentTargetId != -1 -> {
|
||||||
drawer.currentProfile = app.profile.id
|
drawer.currentProfile = app.profile.id
|
||||||
if (navTargetId != intentTargetId || navLoading)
|
if (navTargetId != intentTargetId)
|
||||||
loadTarget(intentTargetId, extras)
|
loadTarget(intentTargetId, extras)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
drawer.currentProfile = app.profile.id
|
drawer.currentProfile = app.profile.id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
navLoading = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun recreate() {
|
override fun recreate() {
|
||||||
|
@ -775,7 +763,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!app.config.loginFinished)
|
if (!app.appConfig.loginFinished)
|
||||||
finish()
|
finish()
|
||||||
else {
|
else {
|
||||||
handleIntent(data?.extras)
|
handleIntent(data?.extras)
|
||||||
|
@ -812,16 +800,13 @@ class MainActivity : AppCompatActivity() {
|
||||||
this.runOnUiThread {
|
this.runOnUiThread {
|
||||||
if (app.profile == null) {
|
if (app.profile == null) {
|
||||||
LoginActivity.firstCompleted = false
|
LoginActivity.firstCompleted = false
|
||||||
if (app.config.loginFinished) {
|
if (app.appConfig.loginFinished) {
|
||||||
// this shouldn't run
|
// this shouldn't run
|
||||||
profileListEmptyListener()
|
profileListEmptyListener()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setDrawerItems()
|
setDrawerItems()
|
||||||
// the drawer profile is updated automatically when the drawer item is clicked
|
drawer.currentProfile = app.profile.id
|
||||||
// update it manually when switching profiles from other source
|
|
||||||
//if (drawer.currentProfile != app.profile.id)
|
|
||||||
drawer.currentProfile = app.profile.id
|
|
||||||
loadTarget(drawerSelection, arguments)
|
loadTarget(drawerSelection, arguments)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -988,7 +973,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
val item = DrawerPrimaryItem()
|
val item = DrawerPrimaryItem()
|
||||||
.withIdentifier(target.id.toLong())
|
.withIdentifier(target.id.toLong())
|
||||||
.withName(target.name)
|
.withName(target.name)
|
||||||
.withHiddenInMiniDrawer(!app.config.ui.miniMenuButtons.contains(target.id))
|
.withHiddenInMiniDrawer(!app.appConfig.miniDrawerButtonIds.contains(target.id))
|
||||||
.also { if (target.description != null) it.withDescription(target.description!!) }
|
.also { if (target.description != null) it.withDescription(target.description!!) }
|
||||||
.also { if (target.icon != null) it.withIcon(target.icon!!) }
|
.also { if (target.icon != null) it.withIcon(target.icon!!) }
|
||||||
.also { if (target.title != null) it.withAppTitle(getString(target.title!!)) }
|
.also { if (target.title != null) it.withAppTitle(getString(target.title!!)) }
|
||||||
|
@ -1077,11 +1062,30 @@ class MainActivity : AppCompatActivity() {
|
||||||
private var targetHomeId: Int = -1
|
private var targetHomeId: Int = -1
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
if (!b.navView.onBackPressed()) {
|
if (!b.navView.onBackPressed()) {
|
||||||
if (App.getConfig().ui.openDrawerOnBackPressed) {
|
|
||||||
b.navView.drawer.toggle()
|
navigateUp()
|
||||||
|
|
||||||
|
/*val currentDestinationId = navController.currentDestination?.id
|
||||||
|
|
||||||
|
if (if (targetHomeId != -1 && targetPopToHomeList.contains(navController.currentDestination?.id)) {
|
||||||
|
if (!navController.popBackStack(targetHomeId, false)) {
|
||||||
|
navController.navigateUp()
|
||||||
|
}
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
navController.navigateUp()
|
||||||
|
}) {
|
||||||
|
val currentId = navController.currentDestination?.id ?: -1
|
||||||
|
val drawerSelection = navTargetList
|
||||||
|
.singleOrNull {
|
||||||
|
it.navGraphId == currentId
|
||||||
|
}?.also {
|
||||||
|
navView.toolbar.setTitle(it.title ?: it.name)
|
||||||
|
}?.id ?: -1
|
||||||
|
drawer.setSelection(drawerSelection, false)
|
||||||
} else {
|
} else {
|
||||||
navigateUp()
|
super.onBackPressed()
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,8 +93,8 @@ public class Notifier {
|
||||||
|
|
||||||
public boolean shouldBeQuiet() {
|
public boolean shouldBeQuiet() {
|
||||||
long now = Time.getNow().getInMillis();
|
long now = Time.getNow().getInMillis();
|
||||||
long start = app.config.getSync().getQuietHoursStart();
|
long start = app.appConfig.quietHoursStart;
|
||||||
long end = app.config.getSync().getQuietHoursEnd();
|
long end = app.appConfig.quietHoursEnd;
|
||||||
if (start > end) {
|
if (start > end) {
|
||||||
end += 1000 * 60 * 60 * 24;
|
end += 1000 * 60 * 60 * 24;
|
||||||
//Log.d(TAG, "Night passing");
|
//Log.d(TAG, "Night passing");
|
||||||
|
@ -104,7 +104,7 @@ public class Notifier {
|
||||||
//Log.d(TAG, "Now is smaller");
|
//Log.d(TAG, "Now is smaller");
|
||||||
}
|
}
|
||||||
//Log.d(TAG, "Start is "+start+", now is "+now+", end is "+end);
|
//Log.d(TAG, "Start is "+start+", now is "+now+", end is "+end);
|
||||||
return start > 0 && now >= start && now <= end;
|
return app.appConfig.quietHoursStart > 0 && now >= start && now <= end;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNotificationDefaults() {
|
public int getNotificationDefaults() {
|
||||||
|
@ -312,7 +312,7 @@ public class Notifier {
|
||||||
| |
|
| |
|
||||||
|*/
|
|*/
|
||||||
public void notificationUpdatesShow(String updateVersion, String updateUrl, String updateFilename, boolean updateDirect) {
|
public void notificationUpdatesShow(String updateVersion, String updateUrl, String updateFilename, boolean updateDirect) {
|
||||||
if (!app.config.getSync().getNotifyAboutUpdates())
|
if (!app.appConfig.notifyAboutUpdates)
|
||||||
return;
|
return;
|
||||||
Intent notificationIntent = new Intent(app.getContext(), BootReceiver.NotificationActionService.class)
|
Intent notificationIntent = new Intent(app.getContext(), BootReceiver.NotificationActionService.class)
|
||||||
.putExtra("update_version", updateVersion)
|
.putExtra("update_version", updateVersion)
|
||||||
|
@ -340,7 +340,7 @@ public class Notifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notificationUpdatesHide() {
|
public void notificationUpdatesHide() {
|
||||||
if (!app.config.getSync().getNotifyAboutUpdates())
|
if (!app.appConfig.notifyAboutUpdates)
|
||||||
return;
|
return;
|
||||||
notificationManager.cancel(ID_UPDATES);
|
notificationManager.cancel(ID_UPDATES);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ import com.mikepenz.iconics.IconicsDrawable
|
||||||
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
||||||
import com.mikepenz.iconics.utils.colorInt
|
import com.mikepenz.iconics.utils.colorInt
|
||||||
import com.mikepenz.iconics.utils.sizeDp
|
import com.mikepenz.iconics.utils.sizeDp
|
||||||
import pl.szczodrzynski.edziennik.data.api.task.EdziennikTask
|
import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson
|
import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
@ -43,8 +43,6 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
super.onReceive(context, intent)
|
super.onReceive(context, intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val ignoreCancelled = true
|
|
||||||
|
|
||||||
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
||||||
val thisWidget = ComponentName(context, WidgetTimetable::class.java)
|
val thisWidget = ComponentName(context, WidgetTimetable::class.java)
|
||||||
|
|
||||||
|
@ -54,9 +52,9 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
val app = context.applicationContext as App
|
val app = context.applicationContext as App
|
||||||
|
|
||||||
var bellSyncDiffMillis: Long = 0
|
var bellSyncDiffMillis: Long = 0
|
||||||
app.config.timetable.bellSyncDiff?.let {
|
if (app.appConfig.bellSyncDiff != null) {
|
||||||
bellSyncDiffMillis = (it.hour * 60 * 60 * 1000 + it.minute * 60 * 1000 + it.second * 1000).toLong()
|
bellSyncDiffMillis = (app.appConfig.bellSyncDiff.hour * 60 * 60 * 1000 + app.appConfig.bellSyncDiff.minute * 60 * 1000 + app.appConfig.bellSyncDiff.second * 1000).toLong()
|
||||||
bellSyncDiffMillis *= app.config.timetable.bellSyncMultiplier.toLong()
|
bellSyncDiffMillis *= app.appConfig.bellSyncMultiplier.toLong()
|
||||||
bellSyncDiffMillis *= -1
|
bellSyncDiffMillis *= -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +122,7 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
val method = declaredMethods[m]
|
val method = declaredMethods[m]
|
||||||
if (method.name == "setDrawableParameters") {
|
if (method.name == "setDrawableParameters") {
|
||||||
method.isAccessible = true
|
method.isAccessible = true
|
||||||
method.invoke(views, R.id.widgetTimetableBackground, true, -1, colorFilter.toInt(), mode, -1)
|
method.invoke(views, R.id.widgetTimetableListView, true, -1, colorFilter.toInt(), mode, -1)
|
||||||
method.invoke(views, R.id.widgetTimetableHeader, true, -1, colorFilter.toInt(), mode, -1)
|
method.invoke(views, R.id.widgetTimetableHeader, true, -1, colorFilter.toInt(), mode, -1)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -187,30 +185,12 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
// search for lessons to display
|
// search for lessons to display
|
||||||
val timetableDate = Date.getToday()
|
val timetableDate = Date.getToday()
|
||||||
var checkedDays = 0
|
var checkedDays = 0
|
||||||
var lessons = lessonList.filter {
|
var lessons = lessonList.filter { it.profileId == profile.id && it.displayDate == timetableDate && it.type != Lesson.TYPE_NO_LESSONS }
|
||||||
it.profileId == profile.id
|
|
||||||
&& it.displayDate == timetableDate
|
|
||||||
&& it.displayEndTime > now
|
|
||||||
&& !(it.isCancelled && ignoreCancelled)
|
|
||||||
}
|
|
||||||
while ((lessons.isEmpty() || lessons.none {
|
while ((lessons.isEmpty() || lessons.none {
|
||||||
it.type != Lesson.TYPE_NO_LESSONS
|
it.displayDate != today || (it.displayDate == today && it.displayEndTime != null && it.displayEndTime!! >= now)
|
||||||
&& (it.displayDate != today
|
|
||||||
|| (it.displayDate == today
|
|
||||||
&& it.displayEndTime != null
|
|
||||||
&& it.displayEndTime!! >= now))
|
|
||||||
}) && checkedDays < 7) {
|
}) && checkedDays < 7) {
|
||||||
|
|
||||||
timetableDate.stepForward(0, 0, 1)
|
timetableDate.stepForward(0, 0, 1)
|
||||||
lessons = lessonList.filter {
|
lessons = lessonList.filter { it.profileId == profile.id && it.displayDate == timetableDate && it.type != Lesson.TYPE_NO_LESSONS }
|
||||||
it.profileId == profile.id
|
|
||||||
&& it.displayDate == timetableDate
|
|
||||||
&& !(it.isCancelled && ignoreCancelled)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lessons.isEmpty() && timetableDate.weekDay <= 5)
|
|
||||||
break
|
|
||||||
|
|
||||||
checkedDays++
|
checkedDays++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,32 +199,6 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
if (lessons.isNotEmpty())
|
if (lessons.isNotEmpty())
|
||||||
displayingDate = timetableDate
|
displayingDate = timetableDate
|
||||||
profileId = profile.id
|
profileId = profile.id
|
||||||
if (lessons.isEmpty()) {
|
|
||||||
views.setViewVisibility(R.id.widgetTimetableListView, View.GONE)
|
|
||||||
views.setViewVisibility(R.id.widgetTimetableNoTimetable, View.VISIBLE)
|
|
||||||
}
|
|
||||||
if (lessons.size == 1 && lessons[0].type == Lesson.TYPE_NO_LESSONS) {
|
|
||||||
views.setViewVisibility(R.id.widgetTimetableListView, View.GONE)
|
|
||||||
views.setViewVisibility(R.id.widgetTimetableNoLessons, View.VISIBLE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (lessons.isEmpty()) {
|
|
||||||
val separator = ItemWidgetTimetableModel()
|
|
||||||
separator.profileId = profile.id
|
|
||||||
separator.bigStyle = widgetConfig.bigStyle
|
|
||||||
separator.darkTheme = widgetConfig.darkTheme
|
|
||||||
separator.isNoTimetableItem = true;
|
|
||||||
models.add(separator)
|
|
||||||
}
|
|
||||||
if (lessons.size == 1 && lessons[0].type == Lesson.TYPE_NO_LESSONS) {
|
|
||||||
val separator = ItemWidgetTimetableModel()
|
|
||||||
separator.profileId = profile.id
|
|
||||||
separator.bigStyle = widgetConfig.bigStyle
|
|
||||||
separator.darkTheme = widgetConfig.darkTheme
|
|
||||||
separator.isNoLessonsItem = true;
|
|
||||||
models.add(separator)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// get all events for the current date
|
// get all events for the current date
|
||||||
|
@ -301,7 +255,7 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
|
|
||||||
// add every event on this lesson
|
// add every event on this lesson
|
||||||
for (event in events) {
|
for (event in events) {
|
||||||
if (event.startTime == null || event.startTime != lesson.displayStartTime)
|
if (event.startTime != null && event.startTime != lesson.displayStartTime)
|
||||||
continue
|
continue
|
||||||
model.eventColors.add(if (event.type == TYPE_HOMEWORK) ItemWidgetTimetableModel.EVENT_COLOR_HOMEWORK else event.getColor())
|
model.eventColors.add(if (event.type == TYPE_HOMEWORK) ItemWidgetTimetableModel.EVENT_COLOR_HOMEWORK else event.getColor())
|
||||||
}
|
}
|
||||||
|
@ -344,6 +298,13 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
val pendingOpenIntent = PendingIntent.getActivity(app, appWidgetId, openIntent, 0)
|
val pendingOpenIntent = PendingIntent.getActivity(app, appWidgetId, openIntent, 0)
|
||||||
views.setOnClickPendingIntent(R.id.widgetTimetableHeader, pendingOpenIntent)
|
views.setOnClickPendingIntent(R.id.widgetTimetableHeader, pendingOpenIntent)
|
||||||
|
|
||||||
|
if (lessonList.isEmpty()) {
|
||||||
|
views.setViewVisibility(R.id.widgetTimetableLoading, View.VISIBLE)
|
||||||
|
views.setRemoteAdapter(R.id.widgetTimetableListView, Intent())
|
||||||
|
views.setTextViewText(R.id.widgetTimetableLoading, app.getString(R.string.widget_timetable_no_lessons))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
timetables!!.put(appWidgetId, models)
|
timetables!!.put(appWidgetId, models)
|
||||||
|
|
||||||
// apply the list service to the list view
|
// apply the list service to the list view
|
||||||
|
@ -354,7 +315,7 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
|
|
||||||
// create an intent used to display the lesson details dialog
|
// create an intent used to display the lesson details dialog
|
||||||
val intentTemplate = Intent(app, LessonDialogActivity::class.java)
|
val intentTemplate = Intent(app, LessonDialogActivity::class.java)
|
||||||
intentTemplate.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK /*or Intent.FLAG_ACTIVITY_CLEAR_TASK*/)
|
intentTemplate.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||||
val pendingIntentTimetable = PendingIntent.getActivity(app, appWidgetId, intentTemplate, 0)
|
val pendingIntentTimetable = PendingIntent.getActivity(app, appWidgetId, intentTemplate, 0)
|
||||||
views.setPendingIntentTemplate(R.id.widgetTimetableListView, pendingIntentTimetable)
|
views.setPendingIntentTemplate(R.id.widgetTimetableListView, pendingIntentTimetable)
|
||||||
|
|
||||||
|
@ -375,8 +336,11 @@ class WidgetTimetable : AppWidgetProvider() {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val ACTION_SYNC_DATA = "ACTION_SYNC_DATA"
|
|
||||||
private const val TAG = "WidgetTimetable"
|
|
||||||
|
val ACTION_SYNC_DATA = "ACTION_SYNC_DATA"
|
||||||
|
private val TAG = "WidgetTimetable"
|
||||||
|
private val modeInt = 0
|
||||||
|
|
||||||
var timetables: SparseArray<List<ItemWidgetTimetableModel>>? = null
|
var timetables: SparseArray<List<ItemWidgetTimetableModel>>? = null
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -12,13 +12,15 @@ 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
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.*
|
import pl.szczodrzynski.edziennik.api.v2.events.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.requests.ServiceCloseRequest
|
import pl.szczodrzynski.edziennik.api.v2.events.requests.ServiceCloseRequest
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.requests.TaskCancelRequest
|
import pl.szczodrzynski.edziennik.api.v2.events.requests.TaskCancelRequest
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.events.task.ErrorReportTask
|
||||||
import pl.szczodrzynski.edziennik.data.api.task.*
|
import pl.szczodrzynski.edziennik.api.v2.events.task.IApiTask
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull
|
import pl.szczodrzynski.edziennik.api.v2.events.task.NotifyTask
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
@ -38,11 +40,9 @@ class ApiService : Service() {
|
||||||
|
|
||||||
private val app by lazy { applicationContext as App }
|
private val app by lazy { applicationContext as App }
|
||||||
|
|
||||||
private val syncingProfiles = mutableListOf<ProfileFull>()
|
|
||||||
|
|
||||||
private val finishingTaskQueue = mutableListOf(
|
private val finishingTaskQueue = mutableListOf(
|
||||||
SzkolnyTask.sync(syncingProfiles),
|
NotifyTask(),
|
||||||
NotifyTask()
|
ErrorReportTask()
|
||||||
)
|
)
|
||||||
private val taskQueue = mutableListOf<IApiTask>()
|
private val taskQueue = mutableListOf<IApiTask>()
|
||||||
private val errorList = mutableListOf<ApiError>()
|
private val errorList = mutableListOf<ApiError>()
|
||||||
|
@ -156,14 +156,11 @@ class ApiService : Service() {
|
||||||
// post an event
|
// post an event
|
||||||
EventBus.getDefault().post(ApiTaskStartedEvent(taskProfileId, task.profile))
|
EventBus.getDefault().post(ApiTaskStartedEvent(taskProfileId, task.profile))
|
||||||
|
|
||||||
task.profile?.let { syncingProfiles.add(it) }
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
when (task) {
|
when (task) {
|
||||||
is EdziennikTask -> task.run(app, taskCallback)
|
is EdziennikTask -> task.run(app, taskCallback)
|
||||||
is NotifyTask -> task.run(app, taskCallback)
|
is NotifyTask -> task.run(app, taskCallback)
|
||||||
is ErrorReportTask -> task.run(app, taskCallback, notification, errorList)
|
is ErrorReportTask -> task.run(app, taskCallback, notification, errorList)
|
||||||
is SzkolnyTask -> task.run(app, taskCallback)
|
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
taskCallback.onError(ApiError(TAG, EXCEPTION_API_TASK).withThrowable(e))
|
taskCallback.onError(ApiError(TAG, EXCEPTION_API_TASK).withThrowable(e))
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-19.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-19.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import pl.szczodrzynski.edziennik.BuildConfig
|
import pl.szczodrzynski.edziennik.BuildConfig
|
||||||
|
@ -64,7 +64,6 @@ const val IDZIENNIK_WEB_TIMETABLE = "mod_panelRodzica/plan/WS_Plan.asmx/pobierzP
|
||||||
const val IDZIENNIK_WEB_GRADES = "mod_panelRodzica/oceny/WS_ocenyUcznia.asmx/pobierzOcenyUcznia"
|
const val IDZIENNIK_WEB_GRADES = "mod_panelRodzica/oceny/WS_ocenyUcznia.asmx/pobierzOcenyUcznia"
|
||||||
const val IDZIENNIK_WEB_MISSING_GRADES = "mod_panelRodzica/brak_ocen/WS_BrakOcenUcznia.asmx/pobierzBrakujaceOcenyUcznia"
|
const val IDZIENNIK_WEB_MISSING_GRADES = "mod_panelRodzica/brak_ocen/WS_BrakOcenUcznia.asmx/pobierzBrakujaceOcenyUcznia"
|
||||||
const val IDZIENNIK_WEB_EXAMS = "mod_panelRodzica/sprawdziany/mod_sprawdzianyPanel.asmx/pobierzListe"
|
const val IDZIENNIK_WEB_EXAMS = "mod_panelRodzica/sprawdziany/mod_sprawdzianyPanel.asmx/pobierzListe"
|
||||||
const val IDZIENNIK_WEB_HOMEWORK = "mod_panelRodzica/pracaDomowa/WS_pracaDomowa.asmx/pobierzPraceDomowe"
|
|
||||||
const val IDZIENNIK_WEB_NOTICES = "mod_panelRodzica/uwagi/WS_uwagiUcznia.asmx/pobierzUwagiUcznia"
|
const val IDZIENNIK_WEB_NOTICES = "mod_panelRodzica/uwagi/WS_uwagiUcznia.asmx/pobierzUwagiUcznia"
|
||||||
const val IDZIENNIK_WEB_ATTENDANCE = "mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia"
|
const val IDZIENNIK_WEB_ATTENDANCE = "mod_panelRodzica/obecnosci/WS_obecnosciUcznia.asmx/pobierzObecnosciUcznia"
|
||||||
const val IDZIENNIK_WEB_ANNOUNCEMENTS = "mod_panelRodzica/tabOgl/WS_tablicaOgloszen.asmx/GetOgloszenia"
|
const val IDZIENNIK_WEB_ANNOUNCEMENTS = "mod_panelRodzica/tabOgl/WS_tablicaOgloszen.asmx/GetOgloszenia"
|
||||||
|
@ -101,5 +100,3 @@ const val VULCAN_API_ENDPOINT_MESSAGES_RECEIVED = "mobile-api/Uczen.v3.Uczen/Wia
|
||||||
const val VULCAN_API_ENDPOINT_MESSAGES_SENT = "mobile-api/Uczen.v3.Uczen/WiadomosciWyslane"
|
const val VULCAN_API_ENDPOINT_MESSAGES_SENT = "mobile-api/Uczen.v3.Uczen/WiadomosciWyslane"
|
||||||
const val VULCAN_API_ENDPOINT_MESSAGES_CHANGE_STATUS = "mobile-api/Uczen.v3.Uczen/ZmienStatusWiadomosci"
|
const val VULCAN_API_ENDPOINT_MESSAGES_CHANGE_STATUS = "mobile-api/Uczen.v3.Uczen/ZmienStatusWiadomosci"
|
||||||
const val VULCAN_API_ENDPOINT_PUSH = "mobile-api/Uczen.v3.Uczen/UstawPushToken"
|
const val VULCAN_API_ENDPOINT_PUSH = "mobile-api/Uczen.v3.Uczen/UstawPushToken"
|
||||||
|
|
||||||
const val EDUDZIENNIK_USER_AGENT = "Szkolny.eu/${BuildConfig.VERSION_NAME}"
|
|
|
@ -1,4 +1,4 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
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
|
||||||
|
@ -10,7 +10,7 @@ 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_TIMETABLE
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_TIMETABLE
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Data
|
import pl.szczodrzynski.edziennik.api.v2.models.Data
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
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.Event
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.*
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.*
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
import android.app.Notification
|
import android.app.Notification
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
|
@ -1,8 +1,8 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Data
|
import pl.szczodrzynski.edziennik.api.v2.models.Data
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Feature
|
import pl.szczodrzynski.edziennik.api.v2.models.Feature
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.LoginMethod
|
import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.EndpointTimer
|
import pl.szczodrzynski.edziennik.data.db.modules.api.EndpointTimer
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_NEVER
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_NEVER
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
/*const val CODE_OTHER = 0
|
/*const val CODE_OTHER = 0
|
||||||
const val CODE_OK = 1
|
const val CODE_OK = 1
|
||||||
|
@ -158,12 +158,6 @@ const val ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA = 441
|
||||||
const val ERROR_IDZIENNIK_API_ACCESS_DENIED = 450
|
const val ERROR_IDZIENNIK_API_ACCESS_DENIED = 450
|
||||||
const val ERROR_IDZIENNIK_API_OTHER = 451
|
const val ERROR_IDZIENNIK_API_OTHER = 451
|
||||||
|
|
||||||
const val ERROR_LOGIN_EDUDZIENNIK_WEB_INVALID_LOGIN = 501
|
|
||||||
const val ERROR_LOGIN_EDUDZIENNIK_WEB_OTHER = 510
|
|
||||||
const val ERROR_LOGIN_EDUDZIENNIK_WEB_NO_SESSION_ID = 511
|
|
||||||
const val ERROR_EDUDZIENNIK_WEB_TIMETABLE_NOT_PUBLIC = 520
|
|
||||||
const val ERROR_EDUDZIENNIK_WEB_TEAM_MISSING = 530
|
|
||||||
|
|
||||||
const val ERROR_TEMPLATE_WEB_OTHER = 801
|
const val ERROR_TEMPLATE_WEB_OTHER = 801
|
||||||
|
|
||||||
const val EXCEPTION_API_TASK = 900
|
const val EXCEPTION_API_TASK = 900
|
||||||
|
@ -174,13 +168,10 @@ const val EXCEPTION_LIBRUS_API_REQUEST = 904
|
||||||
const val EXCEPTION_LIBRUS_SYNERGIA_REQUEST = 905
|
const val EXCEPTION_LIBRUS_SYNERGIA_REQUEST = 905
|
||||||
const val EXCEPTION_MOBIDZIENNIK_WEB_REQUEST = 906
|
const val EXCEPTION_MOBIDZIENNIK_WEB_REQUEST = 906
|
||||||
const val EXCEPTION_VULCAN_API_REQUEST = 907
|
const val EXCEPTION_VULCAN_API_REQUEST = 907
|
||||||
const val EXCEPTION_MOBIDZIENNIK_WEB_FILE_REQUEST = 908
|
const val EXCEPTION_NOTIFY_AND_SYNC = 910
|
||||||
const val EXCEPTION_LIBRUS_MESSAGES_FILE_REQUEST = 909
|
|
||||||
const val EXCEPTION_NOTIFY = 910
|
|
||||||
const val EXCEPTION_LIBRUS_MESSAGES_REQUEST = 911
|
const val EXCEPTION_LIBRUS_MESSAGES_REQUEST = 911
|
||||||
const val EXCEPTION_IDZIENNIK_WEB_REQUEST = 912
|
const val EXCEPTION_IDZIENNIK_WEB_REQUEST = 912
|
||||||
const val EXCEPTION_IDZIENNIK_WEB_API_REQUEST = 913
|
const val EXCEPTION_IDZIENNIK_WEB_API_REQUEST = 913
|
||||||
const val EXCEPTION_IDZIENNIK_API_REQUEST = 914
|
const val EXCEPTION_IDZIENNIK_API_REQUEST = 914
|
||||||
const val EXCEPTION_EDUDZIENNIK_WEB_REQUEST = 920
|
|
||||||
|
|
||||||
const val LOGIN_NO_ARGUMENTS = 1201
|
const val LOGIN_NO_ARGUMENTS = 1201
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
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
|
|
@ -2,20 +2,19 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-20.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-20.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.login.EdudziennikLoginWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLoginApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLoginApi
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLoginWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLoginWeb
|
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginMessages
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginMessages
|
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginPortal
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginPortal
|
import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginSynergia
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginSynergia
|
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.login.MobidziennikLoginWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login.MobidziennikLoginWeb
|
import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.template.login.TemplateLoginApi
|
import pl.szczodrzynski.edziennik.api.v2.template.login.TemplateLoginApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.template.login.TemplateLoginWeb
|
import pl.szczodrzynski.edziennik.api.v2.template.login.TemplateLoginWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLoginApi
|
import pl.szczodrzynski.edziennik.api.v2.vulcan.login.VulcanLoginApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.LoginMethod
|
|
||||||
|
|
||||||
// librus
|
// librus
|
||||||
// mobidziennik
|
// mobidziennik
|
||||||
|
@ -131,14 +130,6 @@ val idziennikLoginMethods = listOf(
|
||||||
.withRequiredLoginMethod { _, _ -> LOGIN_METHOD_IDZIENNIK_WEB }
|
.withRequiredLoginMethod { _, _ -> LOGIN_METHOD_IDZIENNIK_WEB }
|
||||||
)
|
)
|
||||||
|
|
||||||
const val LOGIN_TYPE_EDUDZIENNIK = 5
|
|
||||||
const val LOGIN_METHOD_EDUDZIENNIK_WEB = 100
|
|
||||||
val edudziennikLoginMethods = listOf(
|
|
||||||
LoginMethod(LOGIN_TYPE_EDUDZIENNIK, LOGIN_METHOD_EDUDZIENNIK_WEB, EdudziennikLoginWeb::class.java)
|
|
||||||
.withIsPossible { _, _ -> true }
|
|
||||||
.withRequiredLoginMethod { _, _ -> LOGIN_METHOD_NOT_NEEDED }
|
|
||||||
)
|
|
||||||
|
|
||||||
val templateLoginMethods = listOf(
|
val templateLoginMethods = listOf(
|
||||||
LoginMethod(LOGIN_TYPE_TEMPLATE, LOGIN_METHOD_TEMPLATE_WEB, TemplateLoginWeb::class.java)
|
LoginMethod(LOGIN_TYPE_TEMPLATE, LOGIN_METHOD_TEMPLATE_WEB, TemplateLoginWeb::class.java)
|
||||||
.withIsPossible { _, _ -> true }
|
.withIsPossible { _, _ -> true }
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-6.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
|
object Regexes {
|
||||||
|
val MOBIDZIENNIK_GRADES_SUBJECT_NAME by lazy {
|
||||||
|
"""<div.*?>\n*\s*(.+?)\s*\n*(?:<.*?)??</div>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_GRADES_COLOR by lazy {
|
||||||
|
"""background-color:([#A-Fa-f0-9]+);""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_GRADES_CATEGORY by lazy {
|
||||||
|
"""> (.+?):</span>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_GRADES_CLASS_AVERAGE by lazy {
|
||||||
|
"""Średnia ocen:.*<strong>([0-9]*\.?[0-9]*)</strong>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_GRADES_ADDED_DATE by lazy {
|
||||||
|
"""Wpisano:.*<strong>.+?,\s([0-9]+)\s(.+?)\s([0-9]{4}),\sgodzina\s([0-9:]+)</strong>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_GRADES_COUNT_TO_AVG by lazy {
|
||||||
|
"""Liczona do średniej:.*?<strong>nie<br/?></strong>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_GRADES_DETAILS by lazy {
|
||||||
|
"""<strong.*?>(.+?)</strong>.*?<sup>.+?</sup>.*?<small>\((.+?)\)</small>.*?<span>.*?Wartość oceny:.*?<strong>([0-9.]+)</strong>.*?Wpisał\(a\):.*?<strong>(.+?)</strong>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
|
||||||
|
val MOBIDZIENNIK_EVENT_TYPE by lazy {
|
||||||
|
"""\(([0-9A-ząęóżźńśłć]*?)\)$""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_LUCKY_NUMBER by lazy {
|
||||||
|
"""class="szczesliwy_numerek".*>0*([0-9]+)(?:/0*[0-9]+)*</a>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_CLASS_CALENDAR by lazy {
|
||||||
|
"""events: (.+),$""".toRegex(RegexOption.MULTILINE)
|
||||||
|
}
|
||||||
|
|
||||||
|
val MOBIDZIENNIK_MESSAGE_READ_DATE by lazy {
|
||||||
|
"""czas przeczytania:.+?,\s([0-9]+)\s(.+?)\s([0-9]{4}),\sgodzina\s([0-9:]+)""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_MESSAGE_SENT_READ_DATE by lazy {
|
||||||
|
""".+?,\s([0-9]+)\s(.+?)\s([0-9]{4}),\sgodzina\s([0-9:]+)""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val MOBIDZIENNIK_MESSAGE_ATTACHMENT by lazy {
|
||||||
|
"""href="https://.+?\.mobidziennik.pl/.+?&(?:amp;)?zalacznik=([0-9]+)"(?:.+?<small.+?\(([0-9.]+)\s(M|K|G|)B\))*""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val IDZIENNIK_LOGIN_HIDDEN_FIELDS by lazy {
|
||||||
|
"""<input type="hidden".+?name="([A-z0-9_]+)?".+?value="([A-z0-9_+-/=]+)?".+?>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val IDZIENNIK_LOGIN_ERROR by lazy {
|
||||||
|
"""id="spanErrorMessage">(.*?)</""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val IDZIENNIK_LOGIN_FIRST_ACCOUNT_NAME by lazy {
|
||||||
|
"""Imię i nazwisko:.+?">(.+?)</div>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val IDZIENNIK_LOGIN_FIRST_IS_PARENT by lazy {
|
||||||
|
"""id="ctl00_CzyRodzic" value="([01])" />""".toRegex()
|
||||||
|
}
|
||||||
|
val IDZIENNIK_LOGIN_FIRST_SCHOOL_YEAR by lazy {
|
||||||
|
"""name="ctl00\${"$"}dxComboRokSzkolny".+?selected="selected".*?value="([0-9]+)">([0-9/]+)<""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val IDZIENNIK_LOGIN_FIRST_STUDENT_SELECT by lazy {
|
||||||
|
"""<select.*?name="ctl00\${"$"}dxComboUczniowie".*?</select>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
val IDZIENNIK_LOGIN_FIRST_STUDENT by lazy {
|
||||||
|
"""<option.*?value="([0-9]+)"\sdata-id-ucznia="([A-z0-9]+?)".*?>(.+?)\s(.+?)\s*\((.+?),\s*(.+?)\)</option>""".toRegex(RegexOption.DOT_MATCHES_ALL)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val VULCAN_SHITFT_ANNOTATION by lazy {
|
||||||
|
"""\(przeniesiona (z|na) lekcj[ię] ([0-9]+), (.+)\)""".toRegex()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val LIBRUS_ATTACHMENT_KEY by lazy {
|
||||||
|
"""singleUseKey=([0-9A-f_]+)""".toRegex()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,179 @@
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2
|
||||||
|
|
||||||
|
import pl.szczodrzynski.edziennik.App.APP_URL
|
||||||
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
|
||||||
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.R
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.Data
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.AppError.CODE_APP_SERVER_ERROR
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.notification.Notification
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.notification.Notification.Companion.TYPE_NEW_SHARED_EVENT
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.notification.Notification.Companion.TYPE_NEW_SHARED_HOMEWORK
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.notification.Notification.Companion.TYPE_SERVER_MESSAGE
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.notification.getNotificationTitle
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
|
import pl.szczodrzynski.edziennik.getJsonArray
|
||||||
|
import pl.szczodrzynski.edziennik.getLong
|
||||||
|
import pl.szczodrzynski.edziennik.getString
|
||||||
|
import pl.szczodrzynski.edziennik.network.ServerRequest
|
||||||
|
|
||||||
|
class ServerSync(val data: Data, val onSuccess: () -> Unit) {
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "ServerSync"
|
||||||
|
}
|
||||||
|
|
||||||
|
val app = data.app
|
||||||
|
val profileId = data.profile?.id ?: -1
|
||||||
|
val profileName = data.profile?.name ?: ""
|
||||||
|
val profile = data.profile
|
||||||
|
val loginStore = data.loginStore
|
||||||
|
|
||||||
|
private fun getUsernameId(): String {
|
||||||
|
if (loginStore.data == null) {
|
||||||
|
return "NO_LOGIN_STORE"
|
||||||
|
}
|
||||||
|
if (profile?.studentData == null) {
|
||||||
|
return "NO_STUDENT_STORE"
|
||||||
|
}
|
||||||
|
return when (data.loginStore.type) {
|
||||||
|
LoginStore.LOGIN_TYPE_MOBIDZIENNIK -> loginStore.getLoginData("serverName", "MOBI_UN") + ":" + loginStore.getLoginData("username", "MOBI_UN") + ":" + profile.getStudentData("studentId", -1)
|
||||||
|
LoginStore.LOGIN_TYPE_LIBRUS -> profile.getStudentData("schoolName", "LIBRUS_UN") + ":" + profile.getStudentData("accountLogin", "LIBRUS_LOGIN_UN")
|
||||||
|
LoginStore.LOGIN_TYPE_IUCZNIOWIE -> loginStore.getLoginData("schoolName", "IUCZNIOWIE_UN") + ":" + loginStore.getLoginData("username", "IUCZNIOWIE_UN") + ":" + profile.getStudentData("registerId", -1)
|
||||||
|
LoginStore.LOGIN_TYPE_VULCAN -> profile.getStudentData("schoolName", "VULCAN_UN") + ":" + profile.getStudentData("studentId", -1)
|
||||||
|
LoginStore.LOGIN_TYPE_DEMO -> loginStore.getLoginData("serverName", "DEMO_UN") + ":" + loginStore.getLoginData("username", "DEMO_UN") + ":" + profile.getStudentData("studentId", -1)
|
||||||
|
else -> "TYPE_UNKNOWN"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init { run {
|
||||||
|
if (profile?.registration != Profile.REGISTRATION_ENABLED) {
|
||||||
|
onSuccess()
|
||||||
|
return@run
|
||||||
|
}
|
||||||
|
|
||||||
|
val request = ServerRequest(
|
||||||
|
app,
|
||||||
|
app.requestScheme+APP_URL+"main.php?sync",
|
||||||
|
"Edziennik2/REG",
|
||||||
|
profile,
|
||||||
|
data.loginStore.type,
|
||||||
|
getUsernameId()
|
||||||
|
)
|
||||||
|
|
||||||
|
if (profile.empty) {
|
||||||
|
request.setBodyParameter("first_run", "true")
|
||||||
|
}
|
||||||
|
|
||||||
|
var hasNotifications = true
|
||||||
|
if (app.appConfig.webPushEnabled) {
|
||||||
|
data.notifications
|
||||||
|
.filterNot { it.posted }
|
||||||
|
.let {
|
||||||
|
if (it.isEmpty()) {
|
||||||
|
hasNotifications = false
|
||||||
|
null
|
||||||
|
}
|
||||||
|
else
|
||||||
|
it
|
||||||
|
}?.forEachIndexed { index, notification ->
|
||||||
|
if (notification.type != TYPE_NEW_SHARED_EVENT
|
||||||
|
&& notification.type != TYPE_SERVER_MESSAGE
|
||||||
|
&& notification.type != TYPE_NEW_SHARED_HOMEWORK) {
|
||||||
|
request.setBodyParameter("notify[$index][type]", notification.type.toString())
|
||||||
|
request.setBodyParameter("notify[$index][title]", notification.title)
|
||||||
|
request.setBodyParameter("notify[$index][text]", notification.text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!app.appConfig.webPushEnabled || !hasNotifications) && !profile.enableSharedEvents) {
|
||||||
|
onSuccess()
|
||||||
|
return@run
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = request.runSync()
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
data.error(ApiError(TAG, CODE_APP_SERVER_ERROR)
|
||||||
|
.setCritical(false))
|
||||||
|
onSuccess()
|
||||||
|
return@run
|
||||||
|
}
|
||||||
|
var apiResponse = result.toString()
|
||||||
|
if (result.getString("success") != "true") {
|
||||||
|
data.error(ApiError(TAG, CODE_APP_SERVER_ERROR)
|
||||||
|
.setCritical(false))
|
||||||
|
onSuccess()
|
||||||
|
return@run
|
||||||
|
}
|
||||||
|
// HERE PROCESS ALL THE RECEIVED EVENTS
|
||||||
|
// add them to the profile and create appropriate notifications
|
||||||
|
result.getJsonArray("events")?.forEach { jEventEl ->
|
||||||
|
val event = jEventEl.asJsonObject
|
||||||
|
val teamCode = event.getString("team")
|
||||||
|
|
||||||
|
// get the target Team from teamCode
|
||||||
|
val team = app.db.teamDao().getByCodeNow(profile.id, teamCode)
|
||||||
|
if (team != null) {
|
||||||
|
|
||||||
|
// create the event from Json. Add the missing teamId and !!profileId!!
|
||||||
|
val eventObject = app.gson.fromJson(event.toString(), Event::class.java)
|
||||||
|
// proguard. disable for Event.class
|
||||||
|
if (eventObject.eventDate == null) {
|
||||||
|
apiResponse += "\n\nEventDate == null\n$event"
|
||||||
|
}
|
||||||
|
eventObject.profileId = profileId
|
||||||
|
eventObject.teamId = team.id
|
||||||
|
eventObject.addedManually = true
|
||||||
|
|
||||||
|
if (eventObject.sharedBy == getUsernameId()) {
|
||||||
|
eventObject.sharedBy = "self"
|
||||||
|
eventObject.sharedByName = profile.studentNameLong
|
||||||
|
}
|
||||||
|
|
||||||
|
val typeObject = app.db.eventTypeDao().getByIdNow(profileId, eventObject.type)
|
||||||
|
|
||||||
|
app.db.eventDao().add(eventObject)
|
||||||
|
|
||||||
|
val metadata = Metadata(
|
||||||
|
profileId,
|
||||||
|
if (eventObject.type == TYPE_HOMEWORK) Metadata.TYPE_HOMEWORK else Metadata.TYPE_EVENT,
|
||||||
|
eventObject.id,
|
||||||
|
profile.empty,
|
||||||
|
true,
|
||||||
|
event.getLong("addedDate") ?: 0
|
||||||
|
)
|
||||||
|
|
||||||
|
val metadataId = app.db.metadataDao().add(metadata)
|
||||||
|
|
||||||
|
// notify if the event is new and not first sync
|
||||||
|
if (metadataId != -1L && !profile.empty) {
|
||||||
|
val text = app.getString(
|
||||||
|
R.string.notification_shared_event_format,
|
||||||
|
eventObject.sharedByName,
|
||||||
|
if (typeObject != null) typeObject.name else "wydarzenie",
|
||||||
|
if (eventObject.eventDate == null) "???" else eventObject.eventDate.formattedString,
|
||||||
|
eventObject.topic
|
||||||
|
)
|
||||||
|
val type = if (eventObject.type == TYPE_HOMEWORK) TYPE_NEW_SHARED_HOMEWORK else TYPE_NEW_SHARED_EVENT
|
||||||
|
data.notifications += Notification(
|
||||||
|
title = app.getNotificationTitle(type),
|
||||||
|
text = text,
|
||||||
|
type = type,
|
||||||
|
profileId = profileId,
|
||||||
|
profileName = profileName,
|
||||||
|
viewId = if (eventObject.type == TYPE_HOMEWORK) DRAWER_ITEM_HOMEWORK else DRAWER_ITEM_AGENDA,
|
||||||
|
addedDate = metadata.addedDate
|
||||||
|
).addExtra("eventId", eventObject.id).addExtra("eventDate", eventObject.eventDate.value.toLong())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onSuccess()
|
||||||
|
}}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
|
class ApiTaskAllFinishedEvent
|
|
@ -0,0 +1,9 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
|
|
||||||
|
class ApiTaskErrorEvent(val error: ApiError)
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
|
class ApiTaskFinishedEvent(val profileId: Int)
|
|
@ -2,6 +2,6 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.events
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
class ApiTaskProgressEvent(val profileId: Int, val progress: Float, val progressText: String?)
|
class ApiTaskProgressEvent(val profileId: Int, val progress: Float, val progressText: String?)
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.events
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-11-24
|
* Copyright (c) Kacper Ziubryniewicz 2019-11-24
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.events
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
data class AttachmentGetEvent(val profileId: Int, val messageId: Long, val attachmentId: Long,
|
data class AttachmentGetEvent(val profileId: Int, val messageId: Long, val attachmentId: Long,
|
||||||
var eventType: Int = TYPE_PROGRESS, val fileName: String? = null,
|
var eventType: Int = TYPE_PROGRESS, val fileName: String? = null,
|
|
@ -1,4 +1,4 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api.events
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-11-12.
|
* Copyright (c) Kuba Szczodrzyński 2019-11-12.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.events
|
package pl.szczodrzynski.edziennik.api.v2.events
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.events.requests
|
||||||
|
|
||||||
|
class ServiceCloseRequest
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.events.requests
|
||||||
|
|
||||||
|
class TaskCancelRequest(val taskId: Int)
|
|
@ -1,19 +1,17 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api.task
|
package pl.szczodrzynski.edziennik.api.v2.events.task
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.Edudziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.Idziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.Idziennik
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.Librus
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.Mobidziennik
|
import pl.szczodrzynski.edziennik.api.v2.librus.Librus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.template.Template
|
import pl.szczodrzynski.edziennik.api.v2.mobidziennik.Mobidziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.Vulcan
|
import pl.szczodrzynski.edziennik.api.v2.template.Template
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
import pl.szczodrzynski.edziennik.api.v2.vulcan.Vulcan
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
||||||
|
|
||||||
open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTask(profileId) {
|
open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTask(profileId) {
|
||||||
|
@ -26,7 +24,7 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
|
||||||
fun syncProfileList(profileList: List<Int>) = EdziennikTask(-1, SyncProfileListRequest(profileList))
|
fun syncProfileList(profileList: List<Int>) = EdziennikTask(-1, SyncProfileListRequest(profileList))
|
||||||
fun messageGet(profileId: Int, message: MessageFull) = EdziennikTask(profileId, MessageGetRequest(message))
|
fun messageGet(profileId: Int, message: MessageFull) = EdziennikTask(profileId, MessageGetRequest(message))
|
||||||
fun announcementsRead(profileId: Int) = EdziennikTask(profileId, AnnouncementsReadRequest())
|
fun announcementsRead(profileId: Int) = EdziennikTask(profileId, AnnouncementsReadRequest())
|
||||||
fun attachmentGet(profileId: Int, message: Message, attachmentId: Long, attachmentName: String) = EdziennikTask(profileId, AttachmentGetRequest(message, attachmentId, attachmentName))
|
fun attachmentGet(profileId: Int, messageId: Long, attachmentId: Long, attachmentName: String) = EdziennikTask(profileId, AttachmentGetRequest(messageId, attachmentId, attachmentName))
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var loginStore: LoginStore
|
private lateinit var loginStore: LoginStore
|
||||||
|
@ -40,7 +38,7 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
|
||||||
taskName = app.getString(R.string.edziennik_notification_api_first_login_title)
|
taskName = app.getString(R.string.edziennik_notification_api_first_login_title)
|
||||||
} else {
|
} else {
|
||||||
// get the requested profile and login store
|
// get the requested profile and login store
|
||||||
val profile = app.db.profileDao().getFullByIdNow(profileId)
|
val profile = app.db.profileDao().getByIdNow(profileId)
|
||||||
this.profile = profile
|
this.profile = profile
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
return
|
return
|
||||||
|
@ -60,7 +58,6 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
|
||||||
LOGIN_TYPE_MOBIDZIENNIK -> Mobidziennik(app, profile, loginStore, taskCallback)
|
LOGIN_TYPE_MOBIDZIENNIK -> Mobidziennik(app, profile, loginStore, taskCallback)
|
||||||
LOGIN_TYPE_VULCAN -> Vulcan(app, profile, loginStore, taskCallback)
|
LOGIN_TYPE_VULCAN -> Vulcan(app, profile, loginStore, taskCallback)
|
||||||
LOGIN_TYPE_IDZIENNIK -> Idziennik(app, profile, loginStore, taskCallback)
|
LOGIN_TYPE_IDZIENNIK -> Idziennik(app, profile, loginStore, taskCallback)
|
||||||
LOGIN_TYPE_EDUDZIENNIK -> Edudziennik(app, profile, loginStore, taskCallback)
|
|
||||||
LOGIN_TYPE_TEMPLATE -> Template(app, profile, loginStore, taskCallback)
|
LOGIN_TYPE_TEMPLATE -> Template(app, profile, loginStore, taskCallback)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
@ -77,7 +74,7 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
|
||||||
is MessageGetRequest -> edziennikInterface?.getMessage(request.message)
|
is MessageGetRequest -> edziennikInterface?.getMessage(request.message)
|
||||||
is FirstLoginRequest -> edziennikInterface?.firstLogin()
|
is FirstLoginRequest -> edziennikInterface?.firstLogin()
|
||||||
is AnnouncementsReadRequest -> edziennikInterface?.markAllAnnouncementsAsRead()
|
is AnnouncementsReadRequest -> edziennikInterface?.markAllAnnouncementsAsRead()
|
||||||
is AttachmentGetRequest -> edziennikInterface?.getAttachment(request.message, request.attachmentId, request.attachmentName)
|
is AttachmentGetRequest -> edziennikInterface?.getAttachment(request.messageId, request.attachmentId, request.attachmentName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,5 +92,5 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa
|
||||||
data class SyncProfileListRequest(val profileList: List<Int>)
|
data class SyncProfileListRequest(val profileList: List<Int>)
|
||||||
data class MessageGetRequest(val message: MessageFull)
|
data class MessageGetRequest(val message: MessageFull)
|
||||||
class AnnouncementsReadRequest
|
class AnnouncementsReadRequest
|
||||||
data class AttachmentGetRequest(val message: Message, val attachmentId: Long, val attachmentName: String)
|
data class AttachmentGetRequest(val messageId: Long, val attachmentId: Long, val attachmentName: String)
|
||||||
}
|
}
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.task
|
package pl.szczodrzynski.edziennik.api.v2.events.task
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.ApiService
|
import pl.szczodrzynski.edziennik.api.v2.ApiService
|
||||||
import pl.szczodrzynski.edziennik.data.api.EdziennikNotification
|
import pl.szczodrzynski.edziennik.api.v2.EdziennikNotification
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
|
||||||
class ErrorReportTask : IApiTask(-1) {
|
class ErrorReportTask : IApiTask(-1) {
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.task
|
package pl.szczodrzynski.edziennik.api.v2.events.task
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
@ -10,12 +10,12 @@ import android.os.Build.VERSION.SDK_INT
|
||||||
import android.os.Build.VERSION_CODES.O
|
import android.os.Build.VERSION_CODES.O
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.data.api.ApiService
|
import pl.szczodrzynski.edziennik.api.v2.ApiService
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
|
|
||||||
abstract class IApiTask(open val profileId: Int) {
|
abstract class IApiTask(open val profileId: Int) {
|
||||||
var taskId: Int = 0
|
var taskId: Int = 0
|
||||||
var profile: ProfileFull? = null
|
var profile: Profile? = null
|
||||||
var taskName: String? = null
|
var taskName: String? = null
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,4 +1,4 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api.task
|
package pl.szczodrzynski.edziennik.api.v2.events.task
|
||||||
|
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
@ -8,7 +8,7 @@ import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.MainActivity
|
import pl.szczodrzynski.edziennik.MainActivity
|
||||||
import pl.szczodrzynski.edziennik.Notifier.ID_NOTIFICATIONS
|
import pl.szczodrzynski.edziennik.Notifier.ID_NOTIFICATIONS
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.notification.getNotificationTitle
|
import pl.szczodrzynski.edziennik.data.db.modules.notification.getNotificationTitle
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Notification
|
import pl.szczodrzynski.edziennik.utils.models.Notification
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
@ -24,7 +24,7 @@ class NotifyTask : IApiTask(-1) {
|
||||||
|
|
||||||
fun run(app: App, taskCallback: EdziennikCallback) {
|
fun run(app: App, taskCallback: EdziennikCallback) {
|
||||||
val list = app.db.notificationDao().getNotPostedNow()
|
val list = app.db.notificationDao().getNotPostedNow()
|
||||||
val notificationList = list.subList(0, min(10, list.size))
|
val notificationList = list.subList(0, min(15, list.size))
|
||||||
|
|
||||||
var unreadCount = list.size
|
var unreadCount = list.size
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik
|
package pl.szczodrzynski.edziennik.api.v2.idziennik
|
||||||
|
|
||||||
import androidx.core.util.set
|
import androidx.core.util.set
|
||||||
import okhttp3.Cookie
|
import okhttp3.Cookie
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_API
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_API
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_WEB
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Data
|
import pl.szczodrzynski.edziennik.api.v2.models.Data
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
|
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
|
|
@ -2,21 +2,20 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik
|
package pl.szczodrzynski.edziennik.api.v2.idziennik
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.data.api.CODE_INTERNAL_LIBRUS_ACCOUNT_410
|
import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikData
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikData
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.firstlogin.IdziennikFirstLogin
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.firstlogin.IdziennikFirstLogin
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLogin
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLogin
|
||||||
import pl.szczodrzynski.edziennik.data.api.idziennikLoginMethods
|
import pl.szczodrzynski.edziennik.api.v2.idziennikLoginMethods
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.api.prepare
|
import pl.szczodrzynski.edziennik.api.v2.prepare
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
|
@ -38,7 +37,7 @@ class Idziennik(val app: App, val profile: Profile?, val loginStore: LoginStore,
|
||||||
|
|
||||||
private fun completed() {
|
private fun completed() {
|
||||||
data.saveData()
|
data.saveData()
|
||||||
data.notify {
|
data.notifyAndSyncEvents {
|
||||||
callback.onCompleted()
|
callback.onCompleted()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +70,7 @@ class Idziennik(val app: App, val profile: Profile?, val loginStore: LoginStore,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) {
|
override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,16 +2,15 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik
|
package pl.szczodrzynski.edziennik.api.v2.idziennik
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Feature
|
import pl.szczodrzynski.edziennik.api.v2.models.Feature
|
||||||
|
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_TIMETABLE = 1030
|
const val ENDPOINT_IDZIENNIK_WEB_TIMETABLE = 1030
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_GRADES = 1040
|
const val ENDPOINT_IDZIENNIK_WEB_GRADES = 1040
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES = 1050
|
const val ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES = 1050
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_EXAMS = 1060
|
const val ENDPOINT_IDZIENNIK_WEB_EXAMS = 1060
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_HOMEWORK = 1061
|
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_NOTICES = 1070
|
const val ENDPOINT_IDZIENNIK_WEB_NOTICES = 1070
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS = 1080
|
const val ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS = 1080
|
||||||
const val ENDPOINT_IDZIENNIK_WEB_ATTENDANCE = 1090
|
const val ENDPOINT_IDZIENNIK_WEB_ATTENDANCE = 1090
|
||||||
|
@ -35,10 +34,6 @@ val IdziennikFeatures = listOf(
|
||||||
ENDPOINT_IDZIENNIK_WEB_EXAMS to LOGIN_METHOD_IDZIENNIK_WEB
|
ENDPOINT_IDZIENNIK_WEB_EXAMS to LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
||||||
|
|
||||||
Feature(LOGIN_TYPE_IDZIENNIK, FEATURE_HOMEWORK, listOf(
|
|
||||||
ENDPOINT_IDZIENNIK_WEB_HOMEWORK to LOGIN_METHOD_IDZIENNIK_WEB
|
|
||||||
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
|
||||||
|
|
||||||
Feature(LOGIN_TYPE_IDZIENNIK, FEATURE_BEHAVIOUR, listOf(
|
Feature(LOGIN_TYPE_IDZIENNIK, FEATURE_BEHAVIOUR, listOf(
|
||||||
ENDPOINT_IDZIENNIK_WEB_NOTICES to LOGIN_METHOD_IDZIENNIK_WEB
|
ENDPOINT_IDZIENNIK_WEB_NOTICES to LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
), listOf(LOGIN_METHOD_IDZIENNIK_WEB)),
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-29.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-29.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data
|
||||||
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
|
@ -11,9 +11,9 @@ import com.google.gson.JsonParser
|
||||||
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.TextCallbackHandler
|
import im.wangchao.mhttp.callback.TextCallbackHandler
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.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
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.*
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api.IdziennikApiCurrentRegister
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.api.IdziennikApiCurrentRegister
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api.IdziennikApiMessagesInbox
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.api.IdziennikApiMessagesInbox
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api.IdziennikApiMessagesSent
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.api.IdziennikApiMessagesSent
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web.*
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.web.*
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
|
||||||
class IdziennikData(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
class IdziennikData(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
||||||
|
@ -55,10 +55,6 @@ class IdziennikData(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_exams)
|
data.startProgress(R.string.edziennik_progress_endpoint_exams)
|
||||||
IdziennikWebExams(data, onSuccess)
|
IdziennikWebExams(data, onSuccess)
|
||||||
}
|
}
|
||||||
ENDPOINT_IDZIENNIK_WEB_HOMEWORK -> {
|
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_homework)
|
|
||||||
IdziennikWebHomework(data, onSuccess)
|
|
||||||
}
|
|
||||||
ENDPOINT_IDZIENNIK_WEB_NOTICES -> {
|
ENDPOINT_IDZIENNIK_WEB_NOTICES -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_notices)
|
data.startProgress(R.string.edziennik_progress_endpoint_notices)
|
||||||
IdziennikWebNotices(data, onSuccess)
|
IdziennikWebNotices(data, onSuccess)
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data
|
||||||
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
|
@ -10,9 +10,9 @@ 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 im.wangchao.mhttp.callback.TextCallbackHandler
|
import im.wangchao.mhttp.callback.TextCallbackHandler
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import java.net.HttpURLConnection.HTTP_INTERNAL_ERROR
|
import java.net.HttpURLConnection.HTTP_INTERNAL_ERROR
|
||||||
import java.net.HttpURLConnection.HTTP_UNAUTHORIZED
|
import java.net.HttpURLConnection.HTTP_UNAUTHORIZED
|
||||||
|
@ -94,7 +94,6 @@ open class IdziennikWeb(open val data: DataIdziennik) {
|
||||||
is Long -> json.addProperty(name, value)
|
is Long -> json.addProperty(name, value)
|
||||||
is Float -> json.addProperty(name, value)
|
is Float -> json.addProperty(name, value)
|
||||||
is Char -> json.addProperty(name, value)
|
is Char -> json.addProperty(name, value)
|
||||||
is Boolean -> json.addProperty(name, value)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setJsonBody(json)
|
setJsonBody(json)
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-29.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-29.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.api
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.DAY
|
import pl.szczodrzynski.edziennik.DAY
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_API_CURRENT_REGISTER
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_API_CURRENT_REGISTER
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_API_CURRENT_REGISTER
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_API_CURRENT_REGISTER
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikApi
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber
|
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.getInt
|
import pl.szczodrzynski.edziennik.getInt
|
|
@ -2,13 +2,13 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-30.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-30.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.api
|
||||||
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_API_MESSAGES_INBOX
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_API_MESSAGES_INBOX
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_INBOX
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_INBOX
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikApi
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikApi
|
||||||
import pl.szczodrzynski.edziennik.asJsonObjectList
|
import pl.szczodrzynski.edziennik.asJsonObjectList
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
|
@ -2,15 +2,15 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-30.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-30.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.api
|
||||||
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import pl.szczodrzynski.edziennik.DAY
|
import pl.szczodrzynski.edziennik.DAY
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_API_MESSAGES_SENT
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_API_MESSAGES_SENT
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_SENT
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_SENT
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikApi
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikApi
|
||||||
import pl.szczodrzynski.edziennik.asJsonObjectList
|
import pl.szczodrzynski.edziennik.asJsonObjectList
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT
|
|
@ -2,16 +2,16 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_ANNOUNCEMENTS
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_ANNOUNCEMENTS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement
|
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_ATTENDANCE
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_ATTENDANCE
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_ATTENDANCE
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_ATTENDANCE
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.crc16
|
import pl.szczodrzynski.edziennik.crc16
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
|
@ -2,24 +2,24 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_EXAMS
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_EXAMS
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_EXAMS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_EXAMS
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.lessons.Lesson
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.getJsonObject
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
class IdziennikWebExams(override val data: DataIdziennik,
|
class IdziennikWebExams(override val data: DataIdziennik,
|
||||||
val onSuccess: () -> Unit) : IdziennikWeb(data) {
|
val onSuccess: () -> Unit) : IdziennikWeb(data) {
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "IdziennikWebExams"
|
private const val TAG = "IdziennikWebExams"
|
||||||
}
|
}
|
||||||
|
@ -34,15 +34,14 @@ class IdziennikWebExams(override val data: DataIdziennik,
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getExams() {
|
private fun getExams() {
|
||||||
val param = JsonObject().apply {
|
val param = JsonObject()
|
||||||
addProperty("strona", 1)
|
param.addProperty("strona", 1)
|
||||||
addProperty("iloscNaStrone", "99")
|
param.addProperty("iloscNaStrone", "99")
|
||||||
addProperty("iloscRekordow", -1)
|
param.addProperty("iloscRekordow", -1)
|
||||||
addProperty("kolumnaSort", "ss.Nazwa,sp.Data_sprawdzianu")
|
param.addProperty("kolumnaSort", "ss.Nazwa,sp.Data_sprawdzianu")
|
||||||
addProperty("kierunekSort", 0)
|
param.addProperty("kierunekSort", 0)
|
||||||
addProperty("maxIloscZaznaczonych", 0)
|
param.addProperty("maxIloscZaznaczonych", 0)
|
||||||
addProperty("panelFiltrow", 0)
|
param.addProperty("panelFiltrow", 0)
|
||||||
}
|
|
||||||
|
|
||||||
webApiGet(TAG, IDZIENNIK_WEB_EXAMS, mapOf(
|
webApiGet(TAG, IDZIENNIK_WEB_EXAMS, mapOf(
|
||||||
"idP" to data.registerId,
|
"idP" to data.registerId,
|
||||||
|
@ -56,34 +55,28 @@ class IdziennikWebExams(override val data: DataIdziennik,
|
||||||
return@webApiGet
|
return@webApiGet
|
||||||
}
|
}
|
||||||
|
|
||||||
json.getJsonArray("ListK")?.asJsonObjectList()?.forEach { exam ->
|
for (jExamEl in json.getAsJsonArray("ListK")) {
|
||||||
val id = exam.getLong("_recordId") ?: return@forEach
|
val jExam = jExamEl.asJsonObject
|
||||||
val examDate = Date.fromY_m_d(exam.getString("data") ?: return@forEach)
|
// jExam
|
||||||
val subjectName = exam.getString("przedmiot") ?: return@forEach
|
val eventId = jExam.get("_recordId").asLong
|
||||||
val subjectId = data.getSubject(subjectName, null, subjectName).id
|
val rSubject = data.getSubject(jExam.get("przedmiot").asString, -1, "")
|
||||||
val teacherName = exam.getString("wpisal") ?: return@forEach
|
val rTeacher = data.getTeacherByLastFirst(jExam.get("wpisal").asString)
|
||||||
val teacherId = data.getTeacherByLastFirst(teacherName).id
|
val examDate = Date.fromY_m_d(jExam.get("data").asString)
|
||||||
val topic = exam.getString("zakres") ?: ""
|
val lessonObject = Lesson.getByWeekDayAndSubject(data.lessonList, examDate.weekDay, rSubject.id)
|
||||||
|
val examTime = lessonObject?.startTime
|
||||||
val lessonList = data.db.timetableDao().getForDateNow(profileId, examDate)
|
|
||||||
val startTime = lessonList.firstOrNull { it.subjectId == subjectId }?.startTime
|
|
||||||
|
|
||||||
val eventType = when (exam.getString("rodzaj")) {
|
|
||||||
"sprawdzian/praca klasowa" -> Event.TYPE_EXAM
|
|
||||||
else -> Event.TYPE_SHORT_QUIZ
|
|
||||||
}
|
|
||||||
|
|
||||||
|
val eventType = if (jExam.get("rodzaj").asString == "sprawdzian/praca klasowa") Event.TYPE_EXAM else Event.TYPE_SHORT_QUIZ
|
||||||
val eventObject = Event(
|
val eventObject = Event(
|
||||||
profileId,
|
profileId,
|
||||||
id,
|
eventId,
|
||||||
examDate,
|
examDate,
|
||||||
startTime,
|
examTime,
|
||||||
topic,
|
jExam.get("zakres").asString,
|
||||||
-1,
|
-1,
|
||||||
eventType,
|
eventType,
|
||||||
false,
|
false,
|
||||||
teacherId,
|
rTeacher.id,
|
||||||
subjectId,
|
rSubject.id,
|
||||||
data.teamClass?.id ?: -1
|
data.teamClass?.id ?: -1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -113,8 +106,6 @@ class IdziennikWebExams(override val data: DataIdziennik,
|
||||||
examsNextMonthChecked = true
|
examsNextMonthChecked = true
|
||||||
getExams()
|
getExams()
|
||||||
} else {
|
} else {
|
||||||
data.toRemove.add(DataRemoveModel.Events.futureExceptType(Event.TYPE_HOMEWORK))
|
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_EXAMS, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_EXAMS, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
|
@ -2,17 +2,16 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_GRADES
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_GRADES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_GRADES
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_GRADES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
@ -24,7 +23,7 @@ class IdziennikWebGrades(override val data: DataIdziennik,
|
||||||
private const val TAG = "IdziennikWebGrades"
|
private const val TAG = "IdziennikWebGrades"
|
||||||
}
|
}
|
||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init {
|
||||||
webApiGet(TAG, IDZIENNIK_WEB_GRADES, mapOf(
|
webApiGet(TAG, IDZIENNIK_WEB_GRADES, mapOf(
|
||||||
"idPozDziennika" to data.registerId
|
"idPozDziennika" to data.registerId
|
||||||
)) { result ->
|
)) { result ->
|
||||||
|
@ -124,12 +123,12 @@ class IdziennikWebGrades(override val data: DataIdziennik,
|
||||||
}
|
}
|
||||||
1 -> {
|
1 -> {
|
||||||
gradeObject.type = Grade.TYPE_SEMESTER1_FINAL
|
gradeObject.type = Grade.TYPE_SEMESTER1_FINAL
|
||||||
gradeObject.name = value.toInt().toString()
|
gradeObject.name = name
|
||||||
gradeObject.weight = 0f
|
gradeObject.weight = 0f
|
||||||
}
|
}
|
||||||
2 -> {
|
2 -> {
|
||||||
gradeObject.type = Grade.TYPE_YEAR_FINAL
|
gradeObject.type = Grade.TYPE_YEAR_FINAL
|
||||||
gradeObject.name = value.toInt().toString()
|
gradeObject.name = name
|
||||||
gradeObject.weight = 0f
|
gradeObject.weight = 0f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,22 +141,15 @@ class IdziennikWebGrades(override val data: DataIdziennik,
|
||||||
profileId,
|
profileId,
|
||||||
Metadata.TYPE_GRADE,
|
Metadata.TYPE_GRADE,
|
||||||
id,
|
id,
|
||||||
data.profile.empty,
|
data.profile?.empty ?: false,
|
||||||
data.profile.empty,
|
data.profile?.empty ?: false,
|
||||||
addedDate
|
addedDate
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toRemove.addAll(listOf(
|
|
||||||
Grade.TYPE_NORMAL,
|
|
||||||
Grade.TYPE_SEMESTER1_FINAL,
|
|
||||||
Grade.TYPE_YEAR_FINAL
|
|
||||||
).map {
|
|
||||||
DataRemoveModel.Grades.semesterWithType(profile.currentSemester, it)
|
|
||||||
})
|
|
||||||
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_GRADES, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_GRADES, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
} ?: onSuccess() }
|
}
|
||||||
}
|
}
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_NOTICES
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_NOTICES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_NOTICES
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_NOTICES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.crc16
|
import pl.szczodrzynski.edziennik.crc16
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
|
@ -2,33 +2,29 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-28.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.asJsonObjectList
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_MISSING_GRADES
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_MISSING_GRADES
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_SEMESTER1_PROPOSED
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.TYPE_YEAR_PROPOSED
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.getJsonArray
|
|
||||||
import pl.szczodrzynski.edziennik.getJsonObject
|
import pl.szczodrzynski.edziennik.getJsonObject
|
||||||
import pl.szczodrzynski.edziennik.getString
|
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.getWordGradeValue
|
import pl.szczodrzynski.edziennik.utils.Utils.getWordGradeValue
|
||||||
|
|
||||||
class IdziennikWebProposedGrades(override val data: DataIdziennik,
|
class IdziennikWebProposedGrades(override val data: DataIdziennik,
|
||||||
val onSuccess: () -> Unit) : IdziennikWeb(data) {
|
val onSuccess: () -> Unit) : IdziennikWeb(data) {
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "IdziennikWebProposedGrades"
|
private const val TAG = "IdziennikWebProposedGrades"
|
||||||
}
|
}
|
||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init {
|
||||||
webApiGet(TAG, IDZIENNIK_WEB_MISSING_GRADES, mapOf(
|
webApiGet(TAG, IDZIENNIK_WEB_MISSING_GRADES, mapOf(
|
||||||
"idPozDziennika" to data.registerId
|
"idPozDziennika" to data.registerId
|
||||||
)) { result ->
|
)) { result ->
|
||||||
|
@ -38,17 +34,17 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik,
|
||||||
return@webApiGet
|
return@webApiGet
|
||||||
}
|
}
|
||||||
|
|
||||||
json.getJsonArray("Przedmioty")?.asJsonObjectList()?.forEach { subject ->
|
val jSubjects = json.getAsJsonArray("Przedmioty")
|
||||||
val subjectName = subject.getString("Przedmiot") ?: return@forEach
|
for (jSubjectEl in jSubjects) {
|
||||||
val subjectObject = data.getSubject(subjectName, null, subjectName)
|
val jSubject = jSubjectEl.getAsJsonObject()
|
||||||
|
// jSubject
|
||||||
val semester1Proposed = subject.getString("OcenaSem1") ?: ""
|
val rSubject = data.getSubject(jSubject.get("Przedmiot").getAsString(), -1, jSubject.get("Przedmiot").getAsString())
|
||||||
|
val semester1Proposed = jSubject.get("OcenaSem1").getAsString()
|
||||||
|
val semester2Proposed = jSubject.get("OcenaSem2").getAsString()
|
||||||
val semester1Value = getWordGradeValue(semester1Proposed)
|
val semester1Value = getWordGradeValue(semester1Proposed)
|
||||||
val semester1Id = subjectObject.id * (-100) - 1
|
|
||||||
|
|
||||||
val semester2Proposed = subject.getString("OcenaSem2") ?: ""
|
|
||||||
val semester2Value = getWordGradeValue(semester2Proposed)
|
val semester2Value = getWordGradeValue(semester2Proposed)
|
||||||
val semester2Id = subjectObject.id * (-100) - 2
|
val semester1Id = rSubject.id * -100 - 1
|
||||||
|
val semester2Id = rSubject.id * -100 - 2
|
||||||
|
|
||||||
if (semester1Proposed != "") {
|
if (semester1Proposed != "") {
|
||||||
val gradeObject = Grade(
|
val gradeObject = Grade(
|
||||||
|
@ -62,18 +58,17 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik,
|
||||||
0f,
|
0f,
|
||||||
1,
|
1,
|
||||||
-1,
|
-1,
|
||||||
subjectObject.id
|
rSubject.id)
|
||||||
).apply {
|
|
||||||
type = TYPE_SEMESTER1_PROPOSED
|
gradeObject.type = TYPE_SEMESTER1_PROPOSED
|
||||||
}
|
|
||||||
|
|
||||||
data.gradeList.add(gradeObject)
|
data.gradeList.add(gradeObject)
|
||||||
data.metadataList.add(Metadata(
|
data.metadataList.add(Metadata(
|
||||||
profileId,
|
profileId,
|
||||||
Metadata.TYPE_GRADE,
|
Metadata.TYPE_GRADE,
|
||||||
gradeObject.id,
|
gradeObject.id,
|
||||||
profile.empty,
|
profile?.empty ?: false,
|
||||||
profile.empty,
|
profile?.empty ?: false,
|
||||||
System.currentTimeMillis()
|
System.currentTimeMillis()
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -90,28 +85,24 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik,
|
||||||
0f,
|
0f,
|
||||||
2,
|
2,
|
||||||
-1,
|
-1,
|
||||||
subjectObject.id
|
rSubject.id)
|
||||||
).apply {
|
|
||||||
type = TYPE_YEAR_PROPOSED
|
gradeObject.type = TYPE_YEAR_PROPOSED
|
||||||
}
|
|
||||||
|
|
||||||
data.gradeList.add(gradeObject)
|
data.gradeList.add(gradeObject)
|
||||||
data.metadataList.add(Metadata(
|
data.metadataList.add(Metadata(
|
||||||
profileId,
|
profileId,
|
||||||
Metadata.TYPE_GRADE,
|
Metadata.TYPE_GRADE,
|
||||||
gradeObject.id,
|
gradeObject.id,
|
||||||
profile.empty,
|
profile?.empty ?: false,
|
||||||
profile.empty,
|
profile?.empty ?: false,
|
||||||
System.currentTimeMillis()
|
System.currentTimeMillis()
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toRemove.addAll(listOf(TYPE_SEMESTER1_PROPOSED, TYPE_YEAR_PROPOSED).map {
|
|
||||||
DataRemoveModel.Grades.semesterWithType(profile.currentSemester, it)
|
|
||||||
})
|
|
||||||
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
} ?: onSuccess() }
|
}
|
||||||
}
|
}
|
|
@ -2,17 +2,17 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-11-22
|
* Copyright (c) Kacper Ziubryniewicz 2019-11-22
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web
|
||||||
|
|
||||||
import androidx.core.util.set
|
import androidx.core.util.set
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_TIMETABLE
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_TIMETABLE
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_TIMETABLE
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_TIMETABLE
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange
|
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
|
@ -2,17 +2,17 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-27.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-27.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.firstlogin
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.firstlogin
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_LOGIN_IDZIENNIK_FIRST_NO_SCHOOL_YEAR
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_LOGIN_IDZIENNIK_FIRST_NO_SCHOOL_YEAR
|
||||||
import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_SETTINGS
|
import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_SETTINGS
|
||||||
import pl.szczodrzynski.edziennik.data.api.Regexes
|
import pl.szczodrzynski.edziennik.api.v2.Regexes
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.events.FirstLoginFinishedEvent
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLoginWeb
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLoginWeb
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
import pl.szczodrzynski.edziennik.fixName
|
import pl.szczodrzynski.edziennik.fixName
|
||||||
import pl.szczodrzynski.edziennik.get
|
import pl.szczodrzynski.edziennik.get
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-25.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.login
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_API
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_API
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_WEB
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_WEB
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
|
||||||
class IdziennikLogin(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
class IdziennikLogin(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
|
@ -2,9 +2,9 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-27.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-27.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.login
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
|
|
||||||
class IdziennikLoginApi(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
class IdziennikLoginApi(val data: DataIdziennik, val onSuccess: () -> Unit) {
|
||||||
companion object {
|
companion object {
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-26.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-26.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login
|
package pl.szczodrzynski.edziennik.api.v2.idziennik.login
|
||||||
|
|
||||||
import im.wangchao.mhttp.Request
|
import im.wangchao.mhttp.Request
|
||||||
import im.wangchao.mhttp.Response
|
import im.wangchao.mhttp.Response
|
||||||
|
@ -10,9 +10,9 @@ import im.wangchao.mhttp.callback.TextCallbackHandler
|
||||||
import okhttp3.Cookie
|
import okhttp3.Cookie
|
||||||
import pl.szczodrzynski.edziennik.HOUR
|
import pl.szczodrzynski.edziennik.HOUR
|
||||||
import pl.szczodrzynski.edziennik.MINUTE
|
import pl.szczodrzynski.edziennik.MINUTE
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik
|
import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.get
|
import pl.szczodrzynski.edziennik.get
|
||||||
import pl.szczodrzynski.edziennik.getUnixDate
|
import pl.szczodrzynski.edziennik.getUnixDate
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
|
@ -2,10 +2,10 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.interfaces
|
package pl.szczodrzynski.edziennik.api.v2.interfaces
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Feature
|
import pl.szczodrzynski.edziennik.api.v2.models.Feature
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.LoginMethod
|
import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A callback passed only to an e-register class.
|
* A callback passed only to an e-register class.
|
|
@ -2,17 +2,16 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.interfaces
|
package pl.szczodrzynski.edziennik.api.v2.interfaces
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
||||||
|
|
||||||
interface EdziennikInterface {
|
interface EdziennikInterface {
|
||||||
fun sync(featureIds: List<Int>, viewId: Int? = null, arguments: JsonObject? = null)
|
fun sync(featureIds: List<Int>, viewId: Int? = null, arguments: JsonObject? = null)
|
||||||
fun getMessage(message: MessageFull)
|
fun getMessage(message: MessageFull)
|
||||||
fun markAllAnnouncementsAsRead()
|
fun markAllAnnouncementsAsRead()
|
||||||
fun getAttachment(message: Message, attachmentId: Long, attachmentName: String)
|
fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String)
|
||||||
fun firstLogin()
|
fun firstLogin()
|
||||||
fun cancel()
|
fun cancel()
|
||||||
}
|
}
|
|
@ -2,11 +2,11 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-29.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.interfaces
|
package pl.szczodrzynski.edziennik.api.v2.interfaces
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Feature
|
import pl.szczodrzynski.edziennik.api.v2.models.Feature
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.LoginMethod
|
import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A callback passed to all [Feature]s and [LoginMethod]s
|
* A callback passed to all [Feature]s and [LoginMethod]s
|
|
@ -2,16 +2,16 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus
|
package pl.szczodrzynski.edziennik.api.v2.librus
|
||||||
|
|
||||||
import okhttp3.Cookie
|
import okhttp3.Cookie
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_API
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_MESSAGES
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_PORTAL
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_SYNERGIA
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.models.Data
|
||||||
import pl.szczodrzynski.edziennik.currentTimeUnix
|
import pl.szczodrzynski.edziennik.currentTimeUnix
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_API
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_MESSAGES
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_PORTAL
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_LIBRUS_SYNERGIA
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Data
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
import pl.szczodrzynski.edziennik.isNotNullNorEmpty
|
import pl.szczodrzynski.edziennik.isNotNullNorEmpty
|
||||||
|
@ -148,18 +148,16 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
||||||
*/
|
*/
|
||||||
private var mApiCode: String? = null
|
private var mApiCode: String? = null
|
||||||
var apiCode: String?
|
var apiCode: String?
|
||||||
get() { mApiCode = mApiCode ?: loginStore.getLoginData("accountCode", null); return mApiCode }
|
get() { mApiCode = mApiCode ?: profile?.getStudentData("accountCode", null); return mApiCode }
|
||||||
set(value) {
|
set(value) { profile?.putStudentData("accountCode", value) ?: return; mApiCode = value }
|
||||||
loginStore.putLoginData("accountCode", value); mApiCode = value }
|
|
||||||
/**
|
/**
|
||||||
* A JST login PIN.
|
* A JST login PIN.
|
||||||
* Used only during first login in JST mode.
|
* Used only during first login in JST mode.
|
||||||
*/
|
*/
|
||||||
private var mApiPin: String? = null
|
private var mApiPin: String? = null
|
||||||
var apiPin: String?
|
var apiPin: String?
|
||||||
get() { mApiPin = mApiPin ?: loginStore.getLoginData("accountPin", null); return mApiPin }
|
get() { mApiPin = mApiPin ?: profile?.getStudentData("accountPin", null); return mApiPin }
|
||||||
set(value) {
|
set(value) { profile?.putStudentData("accountPin", value) ?: return; mApiPin = value }
|
||||||
loginStore.putLoginData("accountPin", value); mApiPin = value }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Synergia API access token.
|
* A Synergia API access token.
|
||||||
|
@ -170,7 +168,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
||||||
private var mApiAccessToken: String? = null
|
private var mApiAccessToken: String? = null
|
||||||
var apiAccessToken: String?
|
var apiAccessToken: String?
|
||||||
get() { mApiAccessToken = mApiAccessToken ?: profile?.getStudentData("accountToken", null); return mApiAccessToken }
|
get() { mApiAccessToken = mApiAccessToken ?: profile?.getStudentData("accountToken", null); return mApiAccessToken }
|
||||||
set(value) { mApiAccessToken = value; profile?.putStudentData("accountToken", value) ?: return; }
|
set(value) { profile?.putStudentData("accountToken", value) ?: return; mApiAccessToken = value }
|
||||||
/**
|
/**
|
||||||
* A Synergia API refresh token.
|
* A Synergia API refresh token.
|
||||||
* Used when refreshing the [apiAccessToken] in JST, Synergia modes.
|
* Used when refreshing the [apiAccessToken] in JST, Synergia modes.
|
||||||
|
@ -178,7 +176,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
||||||
private var mApiRefreshToken: String? = null
|
private var mApiRefreshToken: String? = null
|
||||||
var apiRefreshToken: String?
|
var apiRefreshToken: String?
|
||||||
get() { mApiRefreshToken = mApiRefreshToken ?: profile?.getStudentData("accountRefreshToken", null); return mApiRefreshToken }
|
get() { mApiRefreshToken = mApiRefreshToken ?: profile?.getStudentData("accountRefreshToken", null); return mApiRefreshToken }
|
||||||
set(value) { mApiRefreshToken = value; profile?.putStudentData("accountRefreshToken", value) ?: return; }
|
set(value) { profile?.putStudentData("accountRefreshToken", value) ?: return; mApiRefreshToken = value }
|
||||||
/**
|
/**
|
||||||
* The expiry time for [apiAccessToken], as a UNIX timestamp.
|
* The expiry time for [apiAccessToken], as a UNIX timestamp.
|
||||||
* Used when refreshing the [apiAccessToken] in JST, Synergia modes.
|
* Used when refreshing the [apiAccessToken] in JST, Synergia modes.
|
||||||
|
@ -187,7 +185,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
||||||
private var mApiTokenExpiryTime: Long? = null
|
private var mApiTokenExpiryTime: Long? = null
|
||||||
var apiTokenExpiryTime: Long
|
var apiTokenExpiryTime: Long
|
||||||
get() { mApiTokenExpiryTime = mApiTokenExpiryTime ?: profile?.getStudentData("accountTokenTime", 0L); return mApiTokenExpiryTime ?: 0L }
|
get() { mApiTokenExpiryTime = mApiTokenExpiryTime ?: profile?.getStudentData("accountTokenTime", 0L); return mApiTokenExpiryTime ?: 0L }
|
||||||
set(value) { mApiTokenExpiryTime = value; profile?.putStudentData("accountTokenTime", value) ?: return; }
|
set(value) { profile?.putStudentData("accountTokenTime", value) ?: return; mApiTokenExpiryTime = value }
|
||||||
|
|
||||||
/* _____ _
|
/* _____ _
|
||||||
/ ____| (_)
|
/ ____| (_)
|
||||||
|
@ -258,7 +256,6 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
||||||
var startPointsSemester1: Int
|
var startPointsSemester1: Int
|
||||||
get() { mStartPointsSemester1 = mStartPointsSemester1 ?: profile?.getStudentData("startPointsSemester1", 0); return mStartPointsSemester1 ?: 0 }
|
get() { mStartPointsSemester1 = mStartPointsSemester1 ?: profile?.getStudentData("startPointsSemester1", 0); return mStartPointsSemester1 ?: 0 }
|
||||||
set(value) { profile?.putStudentData("startPointsSemester1", value) ?: return; mStartPointsSemester1 = value }
|
set(value) { profile?.putStudentData("startPointsSemester1", value) ?: return; mStartPointsSemester1 = value }
|
||||||
|
|
||||||
private var mStartPointsSemester2: Int? = null
|
private var mStartPointsSemester2: Int? = null
|
||||||
var startPointsSemester2: Int
|
var startPointsSemester2: Int
|
||||||
get() { mStartPointsSemester2 = mStartPointsSemester2 ?: profile?.getStudentData("startPointsSemester2", 0); return mStartPointsSemester2 ?: 0 }
|
get() { mStartPointsSemester2 = mStartPointsSemester2 ?: profile?.getStudentData("startPointsSemester2", 0); return mStartPointsSemester2 ?: 0 }
|
||||||
|
@ -268,14 +265,8 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
||||||
var enablePointGrades: Boolean
|
var enablePointGrades: Boolean
|
||||||
get() { mEnablePointGrades = mEnablePointGrades ?: profile?.getStudentData("enablePointGrades", true); return mEnablePointGrades ?: true }
|
get() { mEnablePointGrades = mEnablePointGrades ?: profile?.getStudentData("enablePointGrades", true); return mEnablePointGrades ?: true }
|
||||||
set(value) { profile?.putStudentData("enablePointGrades", value) ?: return; mEnablePointGrades = value }
|
set(value) { profile?.putStudentData("enablePointGrades", value) ?: return; mEnablePointGrades = value }
|
||||||
|
|
||||||
private var mEnableDescriptiveGrades: Boolean? = null
|
private var mEnableDescriptiveGrades: Boolean? = null
|
||||||
var enableDescriptiveGrades: Boolean
|
var enableDescriptiveGrades: Boolean
|
||||||
get() { mEnableDescriptiveGrades = mEnableDescriptiveGrades ?: profile?.getStudentData("enableDescriptiveGrades", true); return mEnableDescriptiveGrades ?: true }
|
get() { mEnableDescriptiveGrades = mEnableDescriptiveGrades ?: profile?.getStudentData("enableDescriptiveGrades", true); return mEnableDescriptiveGrades ?: true }
|
||||||
set(value) { profile?.putStudentData("enableDescriptiveGrades", value) ?: return; mEnableDescriptiveGrades = value }
|
set(value) { profile?.putStudentData("enableDescriptiveGrades", value) ?: return; mEnableDescriptiveGrades = value }
|
||||||
|
|
||||||
private var mTimetableNotPublic: Boolean? = null
|
|
||||||
var timetableNotPublic: Boolean
|
|
||||||
get() { mTimetableNotPublic = mTimetableNotPublic ?: profile?.getStudentData("timetableNotPublic", false); return mTimetableNotPublic ?: false }
|
|
||||||
set(value) { profile?.putStudentData("timetableNotPublic", value) ?: return; mTimetableNotPublic = value }
|
|
||||||
}
|
}
|
|
@ -2,22 +2,21 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus
|
package pl.szczodrzynski.edziennik.api.v2.librus
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.App
|
import pl.szczodrzynski.edziennik.App
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusData
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetAttachment
|
import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetMessage
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusData
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaMarkAllAnnouncementsAsRead
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.messages.LibrusMessagesGetAttachment
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.firstlogin.LibrusFirstLogin
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.messages.LibrusMessagesGetMessage
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.*
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaMarkAllAnnouncementsAsRead
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback
|
import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.LibrusFirstLogin
|
||||||
import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface
|
import pl.szczodrzynski.edziennik.api.v2.librus.login.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
|
@ -39,7 +38,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
||||||
|
|
||||||
private fun completed() {
|
private fun completed() {
|
||||||
data.saveData()
|
data.saveData()
|
||||||
data.notify {
|
data.notifyAndSyncEvents {
|
||||||
callback.onCompleted()
|
callback.onCompleted()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,12 +105,12 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) {
|
override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) {
|
||||||
LibrusLoginPortal(data) {
|
LibrusLoginPortal(data) {
|
||||||
LibrusLoginApi(data) {
|
LibrusLoginApi(data) {
|
||||||
LibrusLoginSynergia(data) {
|
LibrusLoginSynergia(data) {
|
||||||
LibrusLoginMessages(data) {
|
LibrusLoginMessages(data) {
|
||||||
LibrusMessagesGetAttachment(data, message, attachmentId, attachmentName) {
|
LibrusMessagesGetAttachment(data, messageId, attachmentId, attachmentName) {
|
||||||
completed()
|
completed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -204,7 +203,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
||||||
}
|
}
|
||||||
// TODO PORTAL CAPTCHA
|
// TODO PORTAL CAPTCHA
|
||||||
ERROR_LIBRUS_API_TIMETABLE_NOT_PUBLIC -> {
|
ERROR_LIBRUS_API_TIMETABLE_NOT_PUBLIC -> {
|
||||||
data.timetableNotPublic = true
|
loginStore.putLoginData("timetableNotPublic", true)
|
||||||
data()
|
data()
|
||||||
}
|
}
|
||||||
ERROR_LIBRUS_API_LUCKY_NUMBER_NOT_ACTIVE,
|
ERROR_LIBRUS_API_LUCKY_NUMBER_NOT_ACTIVE,
|
|
@ -2,58 +2,57 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-11.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-11.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus
|
package pl.szczodrzynski.edziennik.api.v2.librus
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.Feature
|
import pl.szczodrzynski.edziennik.api.v2.models.Feature
|
||||||
|
|
||||||
const val ENDPOINT_LIBRUS_API_ME = 1001
|
const val ENDPOINT_LIBRUS_API_ME = 1001
|
||||||
const val ENDPOINT_LIBRUS_API_SCHOOLS = 1002
|
const val ENDPOINT_LIBRUS_API_SCHOOLS = 1002
|
||||||
const val ENDPOINT_LIBRUS_API_CLASSES = 1003
|
const val ENDPOINT_LIBRUS_API_CLASSES = 1003
|
||||||
const val ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES = 1004
|
const val ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES = 1004
|
||||||
const val ENDPOINT_LIBRUS_API_UNITS = 1005
|
const val ENDPOINT_LIBRUS_API_UNITS = 1005
|
||||||
const val ENDPOINT_LIBRUS_API_USERS = 1006
|
const val ENDPOINT_LIBRUS_API_USERS = 1006
|
||||||
const val ENDPOINT_LIBRUS_API_SUBJECTS = 1007
|
const val ENDPOINT_LIBRUS_API_SUBJECTS = 1007
|
||||||
const val ENDPOINT_LIBRUS_API_CLASSROOMS = 1008
|
const val ENDPOINT_LIBRUS_API_CLASSROOMS = 1008
|
||||||
const val ENDPOINT_LIBRUS_API_PUSH_CONFIG = 1010
|
const val ENDPOINT_LIBRUS_API_PUSH_CONFIG = 1010
|
||||||
const val ENDPOINT_LIBRUS_API_TIMETABLES = 1015
|
const val ENDPOINT_LIBRUS_API_TIMETABLES = 1015
|
||||||
const val ENDPOINT_LIBRUS_API_SUBSTITUTIONS = 1016
|
const val ENDPOINT_LIBRUS_API_SUBSTITUTIONS = 1016
|
||||||
const val ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES = 1021
|
const val ENDPOINT_LIBRUS_API_NORMAL_GC = 1021
|
||||||
const val ENDPOINT_LIBRUS_API_POINT_GRADE_CATEGORIES = 1022
|
const val ENDPOINT_LIBRUS_API_POINT_GC = 1022
|
||||||
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADE_CATEGORIES = 1023
|
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GC = 1023
|
||||||
const val ENDPOINT_LIBRUS_API_TEXT_GRADE_CATEGORIES = 1024
|
const val ENDPOINT_LIBRUS_API_TEXT_GC = 1024
|
||||||
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADE_CATEGORIES = 1025
|
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GC = 1025
|
||||||
const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES = 1026
|
const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GC = 1026
|
||||||
const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS = 1027
|
const val ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS = 1030
|
||||||
const val ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS = 1030
|
const val ENDPOINT_LIBRUS_API_NORMAL_GRADES = 1031
|
||||||
const val ENDPOINT_LIBRUS_API_NORMAL_GRADES = 1031
|
const val ENDPOINT_LIBRUS_API_POINT_GRADES = 1032
|
||||||
const val ENDPOINT_LIBRUS_API_POINT_GRADES = 1032
|
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES = 1033
|
||||||
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES = 1033
|
const val ENDPOINT_LIBRUS_API_TEXT_GRADES = 1034
|
||||||
const val ENDPOINT_LIBRUS_API_TEXT_GRADES = 1034
|
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADES = 1035
|
||||||
const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADES = 1035
|
const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES = 1036
|
||||||
const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES = 1036
|
const val ENDPOINT_LIBRUS_API_EVENT_TYPES = 1040
|
||||||
const val ENDPOINT_LIBRUS_API_EVENT_TYPES = 1040
|
const val ENDPOINT_LIBRUS_API_EVENTS = 1041
|
||||||
const val ENDPOINT_LIBRUS_API_EVENTS = 1041
|
const val ENDPOINT_LIBRUS_API_HOMEWORK = 1050
|
||||||
const val ENDPOINT_LIBRUS_API_HOMEWORK = 1050
|
const val ENDPOINT_LIBRUS_API_LUCKY_NUMBER = 1060
|
||||||
const val ENDPOINT_LIBRUS_API_LUCKY_NUMBER = 1060
|
const val ENDPOINT_LIBRUS_API_NOTICE_TYPES = 1070
|
||||||
const val ENDPOINT_LIBRUS_API_NOTICE_TYPES = 1070
|
const val ENDPOINT_LIBRUS_API_NOTICES = 1071
|
||||||
const val ENDPOINT_LIBRUS_API_NOTICES = 1071
|
const val ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES = 1080
|
||||||
const val ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES = 1080
|
const val ENDPOINT_LIBRUS_API_ATTENDANCES = 1081
|
||||||
const val ENDPOINT_LIBRUS_API_ATTENDANCES = 1081
|
const val ENDPOINT_LIBRUS_API_ANNOUNCEMENTS = 1090
|
||||||
const val ENDPOINT_LIBRUS_API_ANNOUNCEMENTS = 1090
|
const val ENDPOINT_LIBRUS_API_PT_MEETINGS = 1100
|
||||||
const val ENDPOINT_LIBRUS_API_PT_MEETINGS = 1100
|
const val ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES = 1109
|
||||||
const val ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES = 1109
|
const val ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS = 1110
|
||||||
const val ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS = 1110
|
const val ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS = 1120
|
||||||
const val ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS = 1120
|
const val ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS = 1130
|
||||||
const val ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS = 1130
|
const val ENDPOINT_LIBRUS_SYNERGIA_INFO = 2010
|
||||||
const val ENDPOINT_LIBRUS_SYNERGIA_INFO = 2010
|
const val ENDPOINT_LIBRUS_SYNERGIA_GRADES = 2020
|
||||||
const val ENDPOINT_LIBRUS_SYNERGIA_GRADES = 2020
|
const val ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK = 2030
|
||||||
const val ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK = 2030
|
const val ENDPOINT_LIBRUS_MESSAGES_RECEIVED = 3010
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_RECEIVED = 3010
|
const val ENDPOINT_LIBRUS_MESSAGES_SENT = 3020
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_SENT = 3020
|
const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030
|
const val ENDPOINT_LIBRUS_MESSAGES_RECEIVERS = 3040
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_RECEIVERS = 3040
|
const val ENDPOINT_LIBRUS_MESSAGES_GET = 3040
|
||||||
const val ENDPOINT_LIBRUS_MESSAGES_GET = 3040
|
|
||||||
|
|
||||||
val LibrusFeatures = listOf(
|
val LibrusFeatures = listOf(
|
||||||
|
|
||||||
|
@ -61,7 +60,7 @@ val LibrusFeatures = listOf(
|
||||||
Feature(LOGIN_TYPE_LIBRUS, FEATURE_PUSH_CONFIG, listOf(
|
Feature(LOGIN_TYPE_LIBRUS, FEATURE_PUSH_CONFIG, listOf(
|
||||||
ENDPOINT_LIBRUS_API_PUSH_CONFIG to LOGIN_METHOD_LIBRUS_API
|
ENDPOINT_LIBRUS_API_PUSH_CONFIG to LOGIN_METHOD_LIBRUS_API
|
||||||
), listOf(LOGIN_METHOD_LIBRUS_API)).withShouldSync { data ->
|
), listOf(LOGIN_METHOD_LIBRUS_API)).withShouldSync { data ->
|
||||||
!data.app.config.sync.tokenLibrusList.contains(data.profileId)
|
data.app.appConfig.fcmTokens[LOGIN_TYPE_LIBRUS]?.second?.contains(data.profileId) == false
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,14 +92,13 @@ val LibrusFeatures = listOf(
|
||||||
* All grades + categories.
|
* All grades + categories.
|
||||||
*/
|
*/
|
||||||
Feature(LOGIN_TYPE_LIBRUS, FEATURE_GRADES, listOf(
|
Feature(LOGIN_TYPE_LIBRUS, FEATURE_GRADES, listOf(
|
||||||
ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_NORMAL_GC to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_POINT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_POINT_GC to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_DESCRIPTIVE_GC to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_TEXT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_TEXT_GC to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GC to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_BEHAVIOUR_GC to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS to LOGIN_METHOD_LIBRUS_API,
|
|
||||||
ENDPOINT_LIBRUS_API_NORMAL_GRADES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_NORMAL_GRADES to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_POINT_GRADES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_POINT_GRADES to LOGIN_METHOD_LIBRUS_API,
|
||||||
ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES to LOGIN_METHOD_LIBRUS_API,
|
ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES to LOGIN_METHOD_LIBRUS_API,
|
|
@ -2,15 +2,15 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data
|
package pl.szczodrzynski.edziennik.api.v2.librus.data
|
||||||
|
|
||||||
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 pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.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 pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import java.net.HttpURLConnection.*
|
import java.net.HttpURLConnection.*
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-5.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-5.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data
|
package pl.szczodrzynski.edziennik.api.v2.librus.data
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.R
|
import pl.szczodrzynski.edziennik.R
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.*
|
import pl.szczodrzynski.edziennik.api.v2.librus.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.api.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetList
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.messages.LibrusMessagesGetList
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaHomework
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaHomework
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaInfo
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaInfo
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
|
||||||
|
@ -81,29 +81,17 @@ class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) {
|
||||||
LibrusApiTimetables(data, onSuccess)
|
LibrusApiTimetables(data, onSuccess)
|
||||||
}
|
}
|
||||||
|
|
||||||
ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES -> {
|
ENDPOINT_LIBRUS_API_NORMAL_GRADES -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_grade_categories)
|
data.startProgress(R.string.edziennik_progress_endpoint_grades)
|
||||||
LibrusApiGradeCategories(data, onSuccess)
|
LibrusApiGrades(data, onSuccess)
|
||||||
}
|
|
||||||
ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES -> {
|
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_grade_categories)
|
|
||||||
LibrusApiBehaviourGradeCategories(data, onSuccess)
|
|
||||||
}
|
}
|
||||||
ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS -> {
|
ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_grade_comments)
|
data.startProgress(R.string.edziennik_progress_endpoint_grade_comments)
|
||||||
LibrusApiGradeComments(data, onSuccess)
|
LibrusApiGradeComments(data, onSuccess)
|
||||||
}
|
}
|
||||||
ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS -> {
|
ENDPOINT_LIBRUS_API_NORMAL_GC -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_grade_comments)
|
data.startProgress(R.string.edziennik_progress_endpoint_grade_categories)
|
||||||
LibrusApiBehaviourGradeComments(data, onSuccess)
|
LibrusApiGradeCategories(data, onSuccess)
|
||||||
}
|
|
||||||
ENDPOINT_LIBRUS_API_NORMAL_GRADES -> {
|
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_grades)
|
|
||||||
LibrusApiGrades(data, onSuccess)
|
|
||||||
}
|
|
||||||
ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES -> {
|
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_behaviour_grades)
|
|
||||||
LibrusApiBehaviourGrades(data, onSuccess)
|
|
||||||
}
|
}
|
||||||
// TODO grades
|
// TODO grades
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-24
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-24
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data
|
package pl.szczodrzynski.edziennik.api.v2.librus.data
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import im.wangchao.mhttp.Request
|
import im.wangchao.mhttp.Request
|
||||||
|
@ -15,9 +15,9 @@ import okhttp3.Cookie
|
||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.parser.Parser
|
import org.jsoup.parser.Parser
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
|
@ -196,7 +196,7 @@ open class LibrusMessages(open val data: DataLibrus) {
|
||||||
try {
|
try {
|
||||||
onSuccess(file)
|
onSuccess(file)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_FILE_REQUEST)
|
data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_REQUEST)
|
||||||
.withResponse(response)
|
.withResponse(response)
|
||||||
.withThrowable(e))
|
.withThrowable(e))
|
||||||
}
|
}
|
||||||
|
@ -206,7 +206,7 @@ open class LibrusMessages(open val data: DataLibrus) {
|
||||||
try {
|
try {
|
||||||
onProgress(bytesWritten, bytesTotal)
|
onProgress(bytesWritten, bytesTotal)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_FILE_REQUEST)
|
data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_REQUEST)
|
||||||
.withThrowable(e))
|
.withThrowable(e))
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data
|
package pl.szczodrzynski.edziennik.api.v2.librus.data
|
||||||
|
|
||||||
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 pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.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 pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-21.
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-21.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data
|
package pl.szczodrzynski.edziennik.api.v2.librus.data
|
||||||
|
|
||||||
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.TextCallbackHandler
|
import im.wangchao.mhttp.callback.TextCallbackHandler
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.api.v2.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
|
|
||||||
open class LibrusSynergia(open val data: DataLibrus) {
|
open class LibrusSynergia(open val data: DataLibrus) {
|
|
@ -2,15 +2,16 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-13
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-13
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ANNOUNCEMENTS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ANNOUNCEMENTS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement
|
import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
|
||||||
class LibrusApiAnnouncements(override val data: DataLibrus,
|
class LibrusApiAnnouncements(override val data: DataLibrus,
|
||||||
|
@ -19,19 +20,19 @@ class LibrusApiAnnouncements(override val data: DataLibrus,
|
||||||
const val TAG = "LibrusApiAnnouncements"
|
const val TAG = "LibrusApiAnnouncements"
|
||||||
}
|
}
|
||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init {
|
||||||
apiGet(TAG, "SchoolNotices") { json ->
|
apiGet(TAG, "SchoolNotices") { json ->
|
||||||
val announcements = json.getJsonArray("SchoolNotices").asJsonObjectList()
|
val announcements = json.getJsonArray("SchoolNotices").asJsonObjectList()
|
||||||
|
|
||||||
announcements?.forEach { announcement ->
|
announcements?.forEach { announcement ->
|
||||||
val id = announcement.getString("Id")?.crc32() ?: return@forEach
|
val id = Utils.crc16(announcement.getString("Id")?.toByteArray()
|
||||||
|
?: return@forEach).toLong()
|
||||||
val subject = announcement.getString("Subject") ?: ""
|
val subject = announcement.getString("Subject") ?: ""
|
||||||
val text = announcement.getString("Content") ?: ""
|
val text = announcement.getString("Content") ?: ""
|
||||||
val startDate = Date.fromY_m_d(announcement.getString("StartDate"))
|
val startDate = Date.fromY_m_d(announcement.getString("StartDate"))
|
||||||
val endDate = Date.fromY_m_d(announcement.getString("EndDate"))
|
val endDate = Date.fromY_m_d(announcement.getString("EndDate"))
|
||||||
val teacherId = announcement.getJsonObject("AddedBy")?.getLong("Id") ?: -1
|
val teacherId = announcement.getJsonObject("AddedBy")?.getLong("Id") ?: -1
|
||||||
val addedDate = announcement.getString("CreationDate")?.let { Date.fromIso(it) }
|
val addedDate = Date.fromIso(announcement.getString("CreationDate"))
|
||||||
?: System.currentTimeMillis()
|
|
||||||
val read = announcement.getBoolean("WasRead") ?: false
|
val read = announcement.getBoolean("WasRead") ?: false
|
||||||
|
|
||||||
val announcementObject = Announcement(
|
val announcementObject = Announcement(
|
||||||
|
@ -50,7 +51,7 @@ class LibrusApiAnnouncements(override val data: DataLibrus,
|
||||||
Metadata.TYPE_ANNOUNCEMENT,
|
Metadata.TYPE_ANNOUNCEMENT,
|
||||||
id,
|
id,
|
||||||
read,
|
read,
|
||||||
profile.empty || read,
|
read,
|
||||||
addedDate
|
addedDate
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -58,5 +59,5 @@ class LibrusApiAnnouncements(override val data: DataLibrus,
|
||||||
data.setSyncNext(ENDPOINT_LIBRUS_API_ANNOUNCEMENTS, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_LIBRUS_API_ANNOUNCEMENTS, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
}}
|
}
|
||||||
}
|
}
|
|
@ -2,13 +2,13 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-13
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-13
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceType
|
import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceType
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-13
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-13
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import androidx.core.util.isEmpty
|
import androidx.core.util.isEmpty
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ATTENDANCES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ATTENDANCES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
@ -36,14 +36,14 @@ class LibrusApiAttendances(override val data: DataLibrus,
|
||||||
val lessonNo = attendance.getInt("LessonNo") ?: return@forEach
|
val lessonNo = attendance.getInt("LessonNo") ?: return@forEach
|
||||||
val startTime = data.lessonRanges.get(lessonNo).startTime
|
val startTime = data.lessonRanges.get(lessonNo).startTime
|
||||||
val lessonDate = Date.fromY_m_d(attendance.getString("Date"))
|
val lessonDate = Date.fromY_m_d(attendance.getString("Date"))
|
||||||
|
val subjectId = data.lessonList.singleOrNull {
|
||||||
|
it.weekDay == lessonDate.weekDay && it.startTime.value == startTime.value
|
||||||
|
}?.subjectId ?: -1
|
||||||
val semester = attendance.getInt("Semester") ?: return@forEach
|
val semester = attendance.getInt("Semester") ?: return@forEach
|
||||||
val type = attendance.getJsonObject("Type")?.getLong("Id") ?: return@forEach
|
val type = attendance.getJsonObject("Type")?.getLong("Id") ?: return@forEach
|
||||||
val typeObject = data.attendanceTypes.get(type)
|
val typeObject = data.attendanceTypes.get(type)
|
||||||
val topic = typeObject?.name ?: ""
|
val topic = typeObject?.name ?: ""
|
||||||
|
|
||||||
val lessonList = data.db.timetableDao().getForDateNow(profileId, lessonDate)
|
|
||||||
val subjectId = lessonList.firstOrNull { it.startTime == startTime }?.subjectId ?: -1
|
|
||||||
|
|
||||||
val attendanceObject = Attendance(
|
val attendanceObject = Attendance(
|
||||||
profileId,
|
profileId,
|
||||||
id,
|
id,
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-14
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-14
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.DAY
|
import pl.szczodrzynski.edziennik.DAY
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_CLASSES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_CLASSES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
||||||
import pl.szczodrzynski.edziennik.getJsonObject
|
import pl.szczodrzynski.edziennik.getJsonObject
|
||||||
import pl.szczodrzynski.edziennik.getLong
|
import pl.szczodrzynski.edziennik.getLong
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_CLASSROOMS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_CLASSROOMS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.classrooms.Classroom
|
import pl.szczodrzynski.edziennik.data.db.modules.classrooms.Classroom
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_EVENT_TYPES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_EVENT_TYPES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.EventType
|
import pl.szczodrzynski.edziennik.data.db.modules.events.EventType
|
||||||
|
|
||||||
class LibrusApiEventTypes(override val data: DataLibrus,
|
class LibrusApiEventTypes(override val data: DataLibrus,
|
|
@ -2,14 +2,13 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import androidx.core.util.isEmpty
|
import androidx.core.util.isEmpty
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_EVENTS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_EVENTS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
@ -70,8 +69,6 @@ class LibrusApiEvents(override val data: DataLibrus,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toRemove.add(DataRemoveModel.Events.futureExceptType(Event.TYPE_HOMEWORK))
|
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_LIBRUS_API_EVENTS, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_LIBRUS_API_EVENTS, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
|
@ -2,13 +2,13 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-11-5
|
* Copyright (c) Kacper Ziubryniewicz 2019-11-5
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NORMAL_GC
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ class LibrusApiGradeCategories(override val data: DataLibrus,
|
||||||
apiGet(TAG, "Grades/Categories") { json ->
|
apiGet(TAG, "Grades/Categories") { json ->
|
||||||
json.getJsonArray("Categories")?.asJsonObjectList()?.forEach { category ->
|
json.getJsonArray("Categories")?.asJsonObjectList()?.forEach { category ->
|
||||||
val id = category.getLong("Id") ?: return@forEach
|
val id = category.getLong("Id") ?: return@forEach
|
||||||
val name = category.getString("Name")?.fixWhiteSpaces() ?: ""
|
val name = category.getString("Name") ?: ""
|
||||||
val weight = when (category.getBoolean("CountToTheAverage")) {
|
val weight = when (category.getBoolean("CountToTheAverage")) {
|
||||||
true -> category.getFloat("Weight") ?: 0f
|
true -> category.getFloat("Weight") ?: 0f
|
||||||
else -> 0f
|
else -> 0f
|
||||||
|
@ -41,7 +41,7 @@ class LibrusApiGradeCategories(override val data: DataLibrus,
|
||||||
data.gradeCategories.put(id, gradeCategoryObject)
|
data.gradeCategories.put(id, gradeCategoryObject)
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_LIBRUS_API_NORMAL_GC, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,14 +2,17 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-11-20
|
* Copyright (c) Kacper Ziubryniewicz 2019-11-20
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.asJsonObjectList
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory
|
||||||
|
import pl.szczodrzynski.edziennik.getJsonArray
|
||||||
|
import pl.szczodrzynski.edziennik.getLong
|
||||||
|
import pl.szczodrzynski.edziennik.getString
|
||||||
|
|
||||||
class LibrusApiGradeComments(override val data: DataLibrus,
|
class LibrusApiGradeComments(override val data: DataLibrus,
|
||||||
val onSuccess: () -> Unit) : LibrusApi(data) {
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
||||||
|
@ -22,7 +25,7 @@ class LibrusApiGradeComments(override val data: DataLibrus,
|
||||||
|
|
||||||
json.getJsonArray("Comments")?.asJsonObjectList()?.forEach { comment ->
|
json.getJsonArray("Comments")?.asJsonObjectList()?.forEach { comment ->
|
||||||
val id = comment.getLong("Id") ?: return@forEach
|
val id = comment.getLong("Id") ?: return@forEach
|
||||||
val text = comment.getString("Text")?.fixWhiteSpaces() ?: return@forEach
|
val text = comment.getString("Text")
|
||||||
|
|
||||||
val gradeCategoryObject = GradeCategory(
|
val gradeCategoryObject = GradeCategory(
|
||||||
profileId,
|
profileId,
|
||||||
|
@ -31,7 +34,7 @@ class LibrusApiGradeComments(override val data: DataLibrus,
|
||||||
-1,
|
-1,
|
||||||
text
|
text
|
||||||
).apply {
|
).apply {
|
||||||
type = GradeCategory.TYPE_NORMAL_COMMENT
|
type = GradeCategory.TYPE_COMMENT
|
||||||
}
|
}
|
||||||
|
|
||||||
data.gradeCategories.put(id, gradeCategoryObject)
|
data.gradeCategories.put(id, gradeCategoryObject)
|
|
@ -1,13 +1,11 @@
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
|
import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade
|
||||||
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.GradeCategory
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
|
@ -19,7 +17,7 @@ class LibrusApiGrades(override val data: DataLibrus,
|
||||||
const val TAG = "LibrusApiGrades"
|
const val TAG = "LibrusApiGrades"
|
||||||
}
|
}
|
||||||
|
|
||||||
init { data.profile?.also { profile ->
|
init {
|
||||||
apiGet(TAG, "Grades") { json ->
|
apiGet(TAG, "Grades") { json ->
|
||||||
val grades = json.getJsonArray("Grades").asJsonObjectList()
|
val grades = json.getJsonArray("Grades").asJsonObjectList()
|
||||||
|
|
||||||
|
@ -48,7 +46,7 @@ class LibrusApiGrades(override val data: DataLibrus,
|
||||||
val description = grade.getJsonArray("Comments")?.asJsonObjectList()?.let { comments ->
|
val description = grade.getJsonArray("Comments")?.asJsonObjectList()?.let { comments ->
|
||||||
if (comments.isNotEmpty()) {
|
if (comments.isNotEmpty()) {
|
||||||
data.gradeCategories.singleOrNull {
|
data.gradeCategories.singleOrNull {
|
||||||
it.type == GradeCategory.TYPE_NORMAL_COMMENT
|
it.type == GradeCategory.TYPE_COMMENT
|
||||||
&& it.categoryId == comments[0].asJsonObject.getLong("Id")
|
&& it.categoryId == comments[0].asJsonObject.getLong("Id")
|
||||||
}?.text
|
}?.text
|
||||||
} else null
|
} else null
|
||||||
|
@ -70,15 +68,15 @@ class LibrusApiGrades(override val data: DataLibrus,
|
||||||
|
|
||||||
when {
|
when {
|
||||||
grade.getBoolean("IsConstituent") ?: false ->
|
grade.getBoolean("IsConstituent") ?: false ->
|
||||||
gradeObject.type = TYPE_NORMAL
|
gradeObject.type = Grade.TYPE_NORMAL
|
||||||
grade.getBoolean("IsSemester") ?: false -> // semester final
|
grade.getBoolean("IsSemester") ?: false -> // semester final
|
||||||
gradeObject.type = if (gradeObject.semester == 1) TYPE_SEMESTER1_FINAL else TYPE_SEMESTER2_FINAL
|
gradeObject.type = if (gradeObject.semester == 1) Grade.TYPE_SEMESTER1_FINAL else Grade.TYPE_SEMESTER2_FINAL
|
||||||
grade.getBoolean("IsSemesterProposition") ?: false -> // semester proposed
|
grade.getBoolean("IsSemesterProposition") ?: false -> // semester proposed
|
||||||
gradeObject.type = if (gradeObject.semester == 1) TYPE_SEMESTER1_PROPOSED else TYPE_SEMESTER2_PROPOSED
|
gradeObject.type = if (gradeObject.semester == 1) Grade.TYPE_SEMESTER1_PROPOSED else Grade.TYPE_SEMESTER2_PROPOSED
|
||||||
grade.getBoolean("IsFinal") ?: false -> // year final
|
grade.getBoolean("IsFinal") ?: false -> // year final
|
||||||
gradeObject.type = TYPE_YEAR_FINAL
|
gradeObject.type = Grade.TYPE_YEAR_FINAL
|
||||||
grade.getBoolean("IsFinalProposition") ?: false -> // year final
|
grade.getBoolean("IsFinalProposition") ?: false -> // year final
|
||||||
gradeObject.type = TYPE_YEAR_PROPOSED
|
gradeObject.type = Grade.TYPE_YEAR_PROPOSED
|
||||||
}
|
}
|
||||||
|
|
||||||
grade.getJsonObject("Improvement")?.also {
|
grade.getJsonObject("Improvement")?.also {
|
||||||
|
@ -96,25 +94,14 @@ class LibrusApiGrades(override val data: DataLibrus,
|
||||||
profileId,
|
profileId,
|
||||||
Metadata.TYPE_GRADE,
|
Metadata.TYPE_GRADE,
|
||||||
id,
|
id,
|
||||||
profile.empty,
|
profile?.empty ?: false,
|
||||||
profile.empty,
|
profile?.empty ?: false,
|
||||||
addedDate
|
addedDate
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toRemove.addAll(listOf(
|
|
||||||
TYPE_NORMAL,
|
|
||||||
TYPE_SEMESTER1_FINAL,
|
|
||||||
TYPE_SEMESTER2_FINAL,
|
|
||||||
TYPE_SEMESTER1_PROPOSED,
|
|
||||||
TYPE_SEMESTER2_PROPOSED,
|
|
||||||
TYPE_YEAR_FINAL,
|
|
||||||
TYPE_YEAR_PROPOSED
|
|
||||||
).map {
|
|
||||||
DataRemoveModel.Grades.semesterWithType(profile.currentSemester, it)
|
|
||||||
})
|
|
||||||
data.setSyncNext(ENDPOINT_LIBRUS_API_NORMAL_GRADES, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_LIBRUS_API_NORMAL_GRADES, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
} ?: onSuccess() }
|
}
|
||||||
}
|
}
|
|
@ -2,13 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-12.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-12.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_HOMEWORK
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_HOMEWORK
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
|
@ -56,8 +55,6 @@ class LibrusApiHomework(override val data: DataLibrus,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
data.toRemove.add(DataRemoveModel.Events.futureWithType(Event.TYPE_HOMEWORK))
|
|
||||||
|
|
||||||
data.setSyncNext(ENDPOINT_LIBRUS_API_HOMEWORK, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_LIBRUS_API_HOMEWORK, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-14
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-14
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.DAY
|
import pl.szczodrzynski.edziennik.DAY
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_LUCKY_NUMBER
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_LUCKY_NUMBER
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber
|
import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.getInt
|
import pl.szczodrzynski.edziennik.getInt
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-3.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ME
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ME
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
|
|
||||||
class LibrusApiMe(override val data: DataLibrus,
|
class LibrusApiMe(override val data: DataLibrus,
|
||||||
val onSuccess: () -> Unit) : LibrusApi(data) {
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NOTICE_TYPES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NOTICE_TYPES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeType
|
import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeType
|
||||||
|
|
||||||
class LibrusApiNoticeTypes(override val data: DataLibrus,
|
class LibrusApiNoticeTypes(override val data: DataLibrus,
|
|
@ -2,13 +2,13 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import androidx.core.util.isEmpty
|
import androidx.core.util.isEmpty
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NOTICES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NOTICES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
|
import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-24.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_PT_MEETINGS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_PT_MEETINGS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
import pl.szczodrzynski.edziennik.data.db.modules.events.Event
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_SCHOOLS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_SCHOOLS
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange
|
import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Time
|
import pl.szczodrzynski.edziennik.utils.models.Time
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -26,7 +26,12 @@ class LibrusApiSchools(override val data: DataLibrus,
|
||||||
|
|
||||||
// create the school's short name using first letters of each long name's word
|
// create the school's short name using first letters of each long name's word
|
||||||
// append the town name and save to student data
|
// append the town name and save to student data
|
||||||
val schoolNameShort = schoolNameLong?.firstLettersName
|
var schoolNameShort = ""
|
||||||
|
schoolNameLong?.split(" ")?.forEach {
|
||||||
|
if (it.isBlank())
|
||||||
|
return@forEach
|
||||||
|
schoolNameShort += it[0].toLowerCase()
|
||||||
|
}
|
||||||
val schoolTown = school?.getString("Town")?.toLowerCase(Locale.getDefault())
|
val schoolTown = school?.getString("Town")?.toLowerCase(Locale.getDefault())
|
||||||
data.schoolName = schoolId.toString() + schoolNameShort + "_" + schoolTown
|
data.schoolName = schoolId.toString() + schoolNameShort + "_" + schoolTown
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_SUBJECTS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_SUBJECTS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
|
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
|
||||||
|
|
||||||
class LibrusApiSubjects(override val data: DataLibrus,
|
class LibrusApiSubjects(override val data: DataLibrus,
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-19
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-19
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceType
|
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceType
|
||||||
|
|
||||||
class LibrusApiTeacherFreeDayTypes(override val data: DataLibrus,
|
class LibrusApiTeacherFreeDayTypes(override val data: DataLibrus,
|
|
@ -2,14 +2,14 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-4.
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-4.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import androidx.core.util.isEmpty
|
import androidx.core.util.isEmpty
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence
|
import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
|
@ -2,10 +2,11 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
|
|
||||||
class LibrusApiTemplate(override val data: DataLibrus,
|
class LibrusApiTemplate(override val data: DataLibrus,
|
||||||
val onSuccess: () -> Unit) : LibrusApi(data) {
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
|
@ -2,15 +2,15 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-11-10.
|
* Copyright (c) Kuba Szczodrzyński 2019-11-10.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import androidx.core.util.isEmpty
|
import androidx.core.util.isEmpty
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TIMETABLES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_TIMETABLES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel
|
import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson
|
import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson
|
||||||
|
@ -69,8 +69,6 @@ class LibrusApiTimetables(override val data: DataLibrus,
|
||||||
|
|
||||||
d(TAG, "Clearing lessons between ${weekStart.stringY_m_d} and ${weekEnd.stringY_m_d} - timetable downloaded for $getDate")
|
d(TAG, "Clearing lessons between ${weekStart.stringY_m_d} and ${weekEnd.stringY_m_d} - timetable downloaded for $getDate")
|
||||||
|
|
||||||
if (data.timetableNotPublic) data.timetableNotPublic = false
|
|
||||||
|
|
||||||
data.toRemove.add(DataRemoveModel.Timetable.between(weekStart, weekEnd))
|
data.toRemove.add(DataRemoveModel.Timetable.between(weekStart, weekEnd))
|
||||||
data.setSyncNext(ENDPOINT_LIBRUS_API_TIMETABLES, SYNC_ALWAYS)
|
data.setSyncNext(ENDPOINT_LIBRUS_API_TIMETABLES, SYNC_ALWAYS)
|
||||||
onSuccess()
|
onSuccess()
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_UNITS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_UNITS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
|
|
||||||
class LibrusApiUnits(override val data: DataLibrus,
|
class LibrusApiUnits(override val data: DataLibrus,
|
||||||
val onSuccess: () -> Unit) : LibrusApi(data) {
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_USERS
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_USERS
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
|
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
|
||||||
|
|
||||||
class LibrusApiUsers(override val data: DataLibrus,
|
class LibrusApiUsers(override val data: DataLibrus,
|
|
@ -2,12 +2,12 @@
|
||||||
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
* Copyright (c) Kuba Szczodrzyński 2019-10-23.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.*
|
import pl.szczodrzynski.edziennik.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
||||||
|
|
||||||
class LibrusApiVirtualClasses(override val data: DataLibrus,
|
class LibrusApiVirtualClasses(override val data: DataLibrus,
|
|
@ -2,29 +2,28 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-11-24
|
* Copyright (c) Kacper Ziubryniewicz 2019-11-24
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.messages
|
||||||
|
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_FILE_DOWNLOAD
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_FILE_DOWNLOAD
|
||||||
import pl.szczodrzynski.edziennik.data.api.EXCEPTION_LIBRUS_MESSAGES_REQUEST
|
import pl.szczodrzynski.edziennik.api.v2.EXCEPTION_LIBRUS_MESSAGES_REQUEST
|
||||||
import pl.szczodrzynski.edziennik.data.api.Regexes
|
import pl.szczodrzynski.edziennik.api.v2.Regexes
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.events.AttachmentGetEvent
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages
|
import pl.szczodrzynski.edziennik.api.v2.events.AttachmentGetEvent.Companion.TYPE_FINISHED
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent
|
import pl.szczodrzynski.edziennik.api.v2.events.AttachmentGetEvent.Companion.TYPE_PROGRESS
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent.Companion.TYPE_FINISHED
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent.Companion.TYPE_PROGRESS
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusMessages
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
|
||||||
import pl.szczodrzynski.edziennik.get
|
import pl.szczodrzynski.edziennik.get
|
||||||
import pl.szczodrzynski.edziennik.getString
|
import pl.szczodrzynski.edziennik.getString
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils
|
import pl.szczodrzynski.edziennik.utils.Utils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
class LibrusMessagesGetAttachment(
|
|
||||||
override val data: DataLibrus, val message: Message, val attachmentId: Long,
|
class LibrusMessagesGetAttachment(override val data: DataLibrus, val messageId: Long, val attachmentId: Long,
|
||||||
val attachmentName: String, val onSuccess: () -> Unit) : LibrusMessages(data), CoroutineScope {
|
val attachmentName: String, val onSuccess: () -> Unit) : LibrusMessages(data), CoroutineScope {
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "LibrusMessagesGetAttachment"
|
const val TAG = "LibrusMessagesGetAttachment"
|
||||||
}
|
}
|
||||||
|
@ -39,7 +38,7 @@ class LibrusMessagesGetAttachment(
|
||||||
init {
|
init {
|
||||||
messagesGet(TAG, "GetFileDownloadLink", parameters = mapOf(
|
messagesGet(TAG, "GetFileDownloadLink", parameters = mapOf(
|
||||||
"fileId" to attachmentId,
|
"fileId" to attachmentId,
|
||||||
"msgId" to message.id,
|
"msgId" to messageId,
|
||||||
"archive" to 0
|
"archive" to 0
|
||||||
)) { doc ->
|
)) { doc ->
|
||||||
val downloadLink = doc.select("response GetFileDownloadLink downloadLink").text()
|
val downloadLink = doc.select("response GetFileDownloadLink downloadLink").text()
|
||||||
|
@ -56,6 +55,8 @@ class LibrusMessagesGetAttachment(
|
||||||
data.error(ApiError(TAG, ERROR_FILE_DOWNLOAD)
|
data.error(ApiError(TAG, ERROR_FILE_DOWNLOAD)
|
||||||
.withApiResponse(doc.toString()))
|
.withApiResponse(doc.toString()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,11 +92,12 @@ class LibrusMessagesGetAttachment(
|
||||||
private fun downloadAttachment(attachmentKey: String) {
|
private fun downloadAttachment(attachmentKey: String) {
|
||||||
val targetFile = File(Utils.getStorageDir(), attachmentName)
|
val targetFile = File(Utils.getStorageDir(), attachmentName)
|
||||||
|
|
||||||
sandboxGetFile(TAG, "CSDownload&singleUseKey=$attachmentKey", targetFile, { file ->
|
sandboxGetFile(TAG, "CSDownload&singleUseKey=$attachmentKey",
|
||||||
|
targetFile, { file ->
|
||||||
|
|
||||||
val event = AttachmentGetEvent(
|
val event = AttachmentGetEvent(
|
||||||
profileId,
|
profileId,
|
||||||
message.id,
|
messageId,
|
||||||
attachmentId,
|
attachmentId,
|
||||||
TYPE_FINISHED,
|
TYPE_FINISHED,
|
||||||
file.absolutePath
|
file.absolutePath
|
||||||
|
@ -106,12 +108,10 @@ class LibrusMessagesGetAttachment(
|
||||||
|
|
||||||
EventBus.getDefault().post(event)
|
EventBus.getDefault().post(event)
|
||||||
|
|
||||||
onSuccess()
|
|
||||||
|
|
||||||
}) { written, _ ->
|
}) { written, _ ->
|
||||||
val event = AttachmentGetEvent(
|
val event = AttachmentGetEvent(
|
||||||
profileId,
|
profileId,
|
||||||
message.id,
|
messageId,
|
||||||
attachmentId,
|
attachmentId,
|
||||||
TYPE_PROGRESS,
|
TYPE_PROGRESS,
|
||||||
bytesWritten = written
|
bytesWritten = written
|
|
@ -2,15 +2,15 @@
|
||||||
* Copyright (c) Kacper Ziubryniewicz 2019-10-24
|
* Copyright (c) Kacper Ziubryniewicz 2019-10-24
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.messages
|
||||||
|
|
||||||
import pl.szczodrzynski.edziennik.DAY
|
import pl.szczodrzynski.edziennik.DAY
|
||||||
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
|
import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES
|
||||||
import pl.szczodrzynski.edziennik.data.api.ERROR_NOT_IMPLEMENTED
|
import pl.szczodrzynski.edziennik.api.v2.ERROR_NOT_IMPLEMENTED
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_MESSAGES_RECEIVED
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_MESSAGES_RECEIVED
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_MESSAGES_SENT
|
import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_MESSAGES_SENT
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusMessages
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED
|
import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue