diff --git a/.gitignore b/.gitignore index ef057948..25786692 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,7 @@ lint/tmp/ # lint/reports/ app/schemas/ + +signatures/ + +app/.cxx \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index e4b2b0ee..15ef006b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -50,7 +50,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 11c43b78..f7131927 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,6 +15,12 @@ android { versionCode release.versionCode versionName release.versionName multiDexEnabled true + + externalNativeBuild { + cmake { + cppFlags "-std=c++11" + } + } } buildTypes { applicationVariants.all { variant -> @@ -62,6 +68,12 @@ android { packagingOptions { exclude 'META-INF/library-core_release.kotlin_module' } + externalNativeBuild { + cmake { + path "src/main/cpp/CMakeLists.txt" + version "3.10.2" + } + } } /*task finalizeBundleDebug(type: Copy) { @@ -170,6 +182,11 @@ dependencies { implementation 'com.github.kuba2k2:RecyclerTabLayout:700f980584' 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 { mavenCentral() diff --git a/app/proguard/app.pro b/app/proguard/app.pro index aeecf18d..0c00ff11 100644 --- a/app/proguard/app.pro +++ b/app/proguard/app.pro @@ -24,6 +24,7 @@ -keep class pl.szczodrzynski.edziennik.utils.models.** { *; } -keep class pl.szczodrzynski.edziennik.data.db.modules.events.Event { *; } -keep class pl.szczodrzynski.edziennik.data.db.modules.events.EventFull { *; } +-keep class pl.szczodrzynski.edziennik.ui.modules.home.HomeCardModel { *; } -keepclassmembers class pl.szczodrzynski.edziennik.widgets.WidgetConfig { public *; } -keepnames class pl.szczodrzynski.edziennik.WidgetTimetable -keepnames class pl.szczodrzynski.edziennik.notifications.WidgetNotifications @@ -48,4 +49,13 @@ # Most of volatile fields are updated with AFU and should not be mangled -keepclassmembernames class kotlinx.** { volatile ; -} \ No newline at end of file +} + +-keepclasseswithmembernames class * { + native ; +} + +-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.** { *; } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d842cb6d..ab159072 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -235,7 +235,7 @@ - + @@ -249,4 +249,4 @@ - \ No newline at end of file + diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..e8096e62 --- /dev/null +++ b/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,44 @@ +# 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} ) \ No newline at end of file diff --git a/app/src/main/cpp/aes.c b/app/src/main/cpp/aes.c new file mode 100644 index 00000000..c67bc03f --- /dev/null +++ b/app/src/main/cpp/aes.c @@ -0,0 +1,520 @@ +#include +#include +#include "aes.h" + +#include + +#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]; +} + diff --git a/app/src/main/cpp/aes.h b/app/src/main/cpp/aes.h new file mode 100644 index 00000000..55856f40 --- /dev/null +++ b/app/src/main/cpp/aes.h @@ -0,0 +1,27 @@ +#ifndef AES_H +#define AES_H + +#include + +#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 diff --git a/app/src/main/cpp/base64.cpp b/app/src/main/cpp/base64.cpp new file mode 100644 index 00000000..5170d8b4 --- /dev/null +++ b/app/src/main/cpp/base64.cpp @@ -0,0 +1,55 @@ +#include "jni.h" +#include +#include + +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; +} diff --git a/app/src/main/cpp/szkolny-signing.cpp b/app/src/main/cpp/szkolny-signing.cpp new file mode 100644 index 00000000..7d1548c2 --- /dev/null +++ b/app/src/main/cpp/szkolny-signing.cpp @@ -0,0 +1,78 @@ +#include +#include +#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] = { + 0x43, 0xb9, 0xaa, 0x80, 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; +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.java b/app/src/main/java/pl/szczodrzynski/edziennik/App.java index b975aff9..ebc7bf2f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/App.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.java @@ -18,7 +18,6 @@ import android.os.Handler; import android.provider.Settings; import android.util.Base64; import android.util.Log; -import android.util.Pair; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatDelegate; @@ -68,9 +67,10 @@ import me.leolin.shortcutbadger.ShortcutBadger; import okhttp3.ConnectionSpec; import okhttp3.OkHttpClient; 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.modules.debuglog.DebugLog; -import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore; import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile; import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull; import pl.szczodrzynski.edziennik.network.NetworkUtils; @@ -83,9 +83,7 @@ import pl.szczodrzynski.edziennik.utils.Themes; import pl.szczodrzynski.edziennik.utils.Utils; 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_VULCAN; public class App extends androidx.multidex.MultiDexApplication implements Configuration.Provider { private static final String TAG = "App"; @@ -145,6 +143,11 @@ public class App extends androidx.multidex.MultiDexApplication implements Config //public Register register; // REGISTER for current profile, read from registerStore public ProfileFull profile; + public Config config; + private static Config mConfig; + public static Config getConfig() { + return mConfig; + } // other stuff public Gson gson; @@ -194,6 +197,10 @@ public class App extends androidx.multidex.MultiDexApplication implements Config gson = new Gson(); networkUtils = new NetworkUtils(this); + config = new Config(db); + config.migrate(this); + mConfig = config; + Iconics.init(getApplicationContext()); Iconics.registerFont(SzkolnyFont.INSTANCE); @@ -208,7 +215,9 @@ public class App extends androidx.multidex.MultiDexApplication implements Config loadConfig(); - Themes.INSTANCE.setThemeInt(appConfig.appTheme); + Signing.INSTANCE.getCert(this); + + Themes.INSTANCE.setThemeInt(config.getUi().getTheme()); try { PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); @@ -216,7 +225,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config byte[] signatureBytes = signature.toByteArray(); MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signatureBytes); - this.signature = Base64.encodeToString(md.digest(), Base64.DEFAULT); + this.signature = Base64.encodeToString(md.digest(), Base64.NO_WRAP); //Log.d(TAG, "Signature is "+this.signature); } } @@ -227,7 +236,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config if ("f054761fbdb6a238".equals(deviceId) || BuildConfig.DEBUG) { devMode = true; } - else if (appConfig.devModePassword != null) { + else if (config.getDevModePassword() != null) { checkDevModePassword(); } @@ -298,7 +307,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config //profileLoadById(appSharedPrefs.getInt("current_profile_id", 1)); - if (appConfig.registerSyncEnabled) { + if (config.getSync().getEnabled()) { SyncWorker.Companion.scheduleNext(this, false); } else { @@ -362,11 +371,10 @@ public class App extends androidx.multidex.MultiDexApplication implements Config shortcutManager.setDynamicShortcuts(Arrays.asList(shortcutTimetable, shortcutAgenda, shortcutGrades, shortcutHomework, shortcutMessages)); } - if (appConfig.appInstalledTime == 0) { + if (config.getAppInstalledTime() == 0) { try { - appConfig.appInstalledTime = getPackageManager().getPackageInfo(getPackageName(), 0).firstInstallTime; - appConfig.appRateSnackbarTime = appConfig.appInstalledTime + 7 * 24 * 60 * 60 * 1000; - saveConfig("appInstalledTime", "appRateSnackbarTime"); + config.setAppInstalledTime(getPackageManager().getPackageInfo(getPackageName(), 0).firstInstallTime); + config.setAppRateSnackbarTime(config.getAppInstalledTime() + 7 * 24 * 60 * 60 * 1000); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } @@ -434,9 +442,9 @@ public class App extends androidx.multidex.MultiDexApplication implements Config final long startTime = System.currentTimeMillis(); FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(instanceIdResult -> { Log.d(TAG, "Token for App is " + instanceIdResult.getToken() + ", ID is " + instanceIdResult.getId()+". Time is "+(System.currentTimeMillis() - startTime)); - appConfig.fcmToken = instanceIdResult.getToken(); + config.getSync().setTokenApp(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()); appConfig.fcmTokens.put(LOGIN_TYPE_MOBIDZIENNIK, new Pair<>(instanceIdResult.getToken(), new ArrayList<>())); }); @@ -450,7 +458,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config if (pair == null || pair.first == null || !pair.first.equals(instanceIdResult.getToken())) { appConfig.fcmTokens.put(LOGIN_TYPE_VULCAN, new Pair<>(instanceIdResult.getToken(), new ArrayList<>())); } - }); + });*/ FirebaseMessaging.getInstance().subscribeToTopic(getPackageName()); @@ -513,7 +521,8 @@ public class App extends androidx.multidex.MultiDexApplication implements Config e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); - appSharedPrefs.edit().remove("app.appConfig."+fieldName).apply(); + Log.w(TAG, "Should remove app.appConfig."+fieldName); + //appSharedPrefs.edit().remove("app.appConfig."+fieldName).apply(); TODO migration } } } @@ -585,7 +594,11 @@ public class App extends androidx.multidex.MultiDexApplication implements Config //appSharedPrefs.edit().putString("config", gson.toJson(appConfig)).apply(); } - + public void profileSave() { + AsyncTask.execute(() -> { + db.profileDao().add(profile); + }); + } public void profileSaveAsync() { AsyncTask.execute(() -> { @@ -606,14 +619,6 @@ public class App extends androidx.multidex.MultiDexApplication implements Config db.profileDao().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) { profileLoadById(id, false); @@ -636,6 +641,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config MainActivity.Companion.setUseOldMessages(profile.getLoginStoreType() == LOGIN_TYPE_MOBIDZIENNIK && appConfig.mobidziennikOldMessages == 1); profileId = profile.getId(); appSharedPrefs.edit().putInt("current_profile_id", profile.getId()).apply(); + config.setProfile(profileId); } else if (!loadedLast) { profileLoadById(profileLastId(), true); @@ -706,7 +712,7 @@ public class App extends androidx.multidex.MultiDexApplication implements Config public void checkDevModePassword() { try { - devMode = Utils.AESCrypt.decrypt("nWFVxY65Pa8/aRrT7EylNAencmOD+IxUY2Gg/beiIWY=", appConfig.devModePassword).equals("ok here you go it's enabled now") + devMode = Utils.AESCrypt.decrypt("nWFVxY65Pa8/aRrT7EylNAencmOD+IxUY2Gg/beiIWY=", config.getDevModePassword()).equals("ok here you go it's enabled now") || BuildConfig.DEBUG; } catch (Exception e) { e.printStackTrace(); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/App.kt b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt new file mode 100644 index 00000000..f31deb09 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/App.kt @@ -0,0 +1,319 @@ +/* + * 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 = 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 + } + }*/ +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt index 0334cde6..e327d770 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt @@ -5,6 +5,8 @@ import android.app.Activity import android.content.Context import android.content.pm.PackageManager import android.content.res.Resources +import android.graphics.PorterDuff +import android.graphics.PorterDuffColorFilter import android.graphics.Typeface import android.graphics.drawable.Drawable import android.os.Build @@ -13,6 +15,8 @@ import android.text.* import android.text.style.ForegroundColorSpan import android.text.style.StrikethroughSpan import android.text.style.StyleSpan +import android.util.Base64.NO_WRAP +import android.util.Base64.encodeToString import android.util.LongSparseArray import android.util.SparseArray import android.util.TypedValue @@ -32,14 +36,20 @@ import im.wangchao.mhttp.Response import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay 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.teachers.Teacher import pl.szczodrzynski.edziennik.data.db.modules.teams.Team import pl.szczodrzynski.edziennik.utils.models.Time import pl.szczodrzynski.navlib.getColorFromRes +import java.math.BigInteger +import java.security.MessageDigest import java.text.SimpleDateFormat import java.util.* import java.util.zip.CRC32 +import javax.crypto.Mac +import javax.crypto.spec.SecretKeySpec fun List.byId(id: Long) = firstOrNull { it.id == id } @@ -200,6 +210,7 @@ const val DAY = 24L*HOUR const val WEEK = 7L*DAY const val MONTH = 30L*DAY const val YEAR = 365L*DAY +const val MS = 1000L fun LongSparseArray.values(): List { val result = mutableListOf() @@ -354,6 +365,34 @@ fun String.crc32(): Long { 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 CharSequence?.asColoredSpannable(colorInt: Int): Spannable { @@ -587,3 +626,18 @@ fun Context.timeLeft(time: Int, delimiter: String = " "): String { return parts.joinToString(delimiter) { resources.getQuantityString(it.first, it.second, it.second) } } + +inline fun 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 +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt index d1ae3ed3..e4d8ceae 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/MainActivity.kt @@ -11,6 +11,7 @@ import android.graphics.BitmapFactory import android.graphics.drawable.BitmapDrawable import android.os.* import android.provider.Settings +import android.util.Log import android.view.Gravity import android.view.View import android.widget.Toast @@ -36,8 +37,9 @@ import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import pl.droidsonroids.gif.GifDrawable import pl.szczodrzynski.edziennik.App.APP_URL -import pl.szczodrzynski.edziennik.api.v2.events.* -import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask +import pl.szczodrzynski.edziennik.data.api.events.* +import pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.Signing +import pl.szczodrzynski.edziennik.data.api.task.EdziennikTask import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.* import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding import pl.szczodrzynski.edziennik.network.ServerRequest @@ -71,6 +73,7 @@ import pl.szczodrzynski.edziennik.utils.Utils import pl.szczodrzynski.edziennik.utils.Utils.d import pl.szczodrzynski.edziennik.utils.Utils.dpToPx import pl.szczodrzynski.edziennik.utils.appManagerIntentList +import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.NavTarget import pl.szczodrzynski.navlib.* import pl.szczodrzynski.navlib.SystemBarsUtil.Companion.COLOR_HALF_TRANSPARENT @@ -243,12 +246,14 @@ class MainActivity : AppCompatActivity() { setTheme(Themes.appTheme) - app.appConfig.language?.let { + app.config.ui.language?.let { setLanguage(it) } setContentView(b.root) + Log.d(TAG, Signing.appPassword) + errorSnackbar.setCoordinator(b.navView.coordinator, b.navView.bottomBar) navLoading = true @@ -306,10 +311,10 @@ class MainActivity : AppCompatActivity() { } drawer.apply { - setAccountHeaderBackground(app.appConfig.headerBackground) + setAccountHeaderBackground(app.config.ui.headerBackground) drawerProfileListEmptyListener = { - app.appConfig.loginFinished = false + app.config.loginFinished = false app.saveConfig("loginFinished") profileListEmptyListener() } @@ -334,7 +339,7 @@ class MainActivity : AppCompatActivity() { drawerProfileSettingClickListener = this@MainActivity.profileSettingClickListener miniDrawerVisibleLandscape = null - miniDrawerVisiblePortrait = app.appConfig.miniDrawerVisible + miniDrawerVisiblePortrait = app.config.ui.miniMenuVisible } } @@ -387,29 +392,37 @@ class MainActivity : AppCompatActivity() { SyncWorker.scheduleNext(app) // APP BACKGROUND - if (app.appConfig.appBackground != null) { + if (app.config.ui.appBackground != null) { try { - var bg = app.appConfig.appBackground - val bgDir = File(Environment.getExternalStoragePublicDirectory("Szkolny.eu"), "bg") - if (bgDir.exists()) { - val files = bgDir.listFiles() - val r = Random() - val i = r.nextInt(files.size) - bg = files[i].toString() - } - val linearLayout = b.root - if (bg.endsWith(".gif")) { - linearLayout.background = GifDrawable(bg) - } else { - linearLayout.background = BitmapDrawable.createFromPath(bg) + app.config.ui.appBackground?.let { + var bg = it + val bgDir = File(Environment.getExternalStoragePublicDirectory("Szkolny.eu"), "bg") + if (bgDir.exists()) { + val files = bgDir.listFiles() + val r = Random() + val i = r.nextInt(files.size) + bg = files[i].toString() + } + val linearLayout = b.root + if (bg.endsWith(".gif")) { + linearLayout.background = GifDrawable(bg) + } else { + linearLayout.background = BitmapDrawable.createFromPath(bg) + } } } catch (e: IOException) { 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 - if (app.appConfig.lastAppVersion != BuildConfig.VERSION_CODE) { + if (app.config.appVersion < BuildConfig.VERSION_CODE) { ServerRequest(app, app.requestScheme + APP_URL + "main.php?just_updated", "MainActivity/JU") .run { e, result -> Handler(Looper.getMainLooper()).post { @@ -420,17 +433,16 @@ class MainActivity : AppCompatActivity() { } } } - if (app.appConfig.lastAppVersion < 170) { + if (app.config.appVersion < 170) { //Intent intent = new Intent(this, ChangelogIntroActivity.class); //startActivity(intent); } else { - app.appConfig.lastAppVersion = BuildConfig.VERSION_CODE - app.saveConfig("lastAppVersion") + app.config.appVersion = BuildConfig.VERSION_CODE } } // RATE SNACKBAR - if (app.appConfig.appRateSnackbarTime != 0L && app.appConfig.appRateSnackbarTime <= System.currentTimeMillis()) { + if (app.config.appRateSnackbarTime != 0L && app.config.appRateSnackbarTime <= System.currentTimeMillis()) { navView.coordinator.postDelayed({ CafeBar.builder(this) .content(R.string.rate_snackbar_text) @@ -444,20 +456,17 @@ class MainActivity : AppCompatActivity() { .onPositive { cafeBar -> Utils.openGooglePlay(this) cafeBar.dismiss() - app.appConfig.appRateSnackbarTime = 0 - app.saveConfig("appRateSnackbarTime") + app.config.appRateSnackbarTime = 0 } .onNegative { cafeBar -> Toast.makeText(this, "Szkoda, opinie innych pomagają mi rozwijać aplikację.", Toast.LENGTH_LONG).show() cafeBar.dismiss() - app.appConfig.appRateSnackbarTime = 0 - app.saveConfig("appRateSnackbarTime") + app.config.appRateSnackbarTime = 0 } .onNeutral { cafeBar -> Toast.makeText(this, "OK", Toast.LENGTH_LONG).show() cafeBar.dismiss() - app.appConfig.appRateSnackbarTime = System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000 - app.saveConfig("appRateSnackbarTime") + app.config.appRateSnackbarTime = System.currentTimeMillis() + 7 * 24 * 60 * 60 * 1000 } .autoDismiss(false) .swipeToDismiss(true) @@ -689,14 +698,13 @@ class MainActivity : AppCompatActivity() { }*/ if (navLoading) { - navLoading = false b.fragment.removeAllViews() if (intentTargetId == -1) intentTargetId = HOME_ID } when { - app.profile == null -> { + app.profile == null || app.profile.id == -1 -> { if (intentProfileId == -1) intentProfileId = app.appSharedPrefs.getInt("current_profile_id", 1) loadProfile(intentProfileId, intentTargetId, extras) @@ -709,13 +717,14 @@ class MainActivity : AppCompatActivity() { } intentTargetId != -1 -> { drawer.currentProfile = app.profile.id - if (navTargetId != intentTargetId) + if (navTargetId != intentTargetId || navLoading) loadTarget(intentTargetId, extras) } else -> { drawer.currentProfile = app.profile.id } } + navLoading = false } override fun recreate() { @@ -763,7 +772,7 @@ class MainActivity : AppCompatActivity() { finish() } else { - if (!app.appConfig.loginFinished) + if (!app.config.loginFinished) finish() else { handleIntent(data?.extras) @@ -800,13 +809,16 @@ class MainActivity : AppCompatActivity() { this.runOnUiThread { if (app.profile == null) { LoginActivity.firstCompleted = false - if (app.appConfig.loginFinished) { + if (app.config.loginFinished) { // this shouldn't run profileListEmptyListener() } } else { setDrawerItems() - drawer.currentProfile = app.profile.id + // the drawer profile is updated automatically when the drawer item is clicked + // update it manually when switching profiles from other source + //if (drawer.currentProfile != app.profile.id) + drawer.currentProfile = app.profile.id loadTarget(drawerSelection, arguments) } } @@ -973,7 +985,7 @@ class MainActivity : AppCompatActivity() { val item = DrawerPrimaryItem() .withIdentifier(target.id.toLong()) .withName(target.name) - .withHiddenInMiniDrawer(!app.appConfig.miniDrawerButtonIds.contains(target.id)) + .withHiddenInMiniDrawer(!app.config.ui.miniMenuButtons.contains(target.id)) .also { if (target.description != null) it.withDescription(target.description!!) } .also { if (target.icon != null) it.withIcon(target.icon!!) } .also { if (target.title != null) it.withAppTitle(getString(target.title!!)) } @@ -1062,30 +1074,11 @@ class MainActivity : AppCompatActivity() { private var targetHomeId: Int = -1 override fun onBackPressed() { if (!b.navView.onBackPressed()) { - - 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) + if (App.getConfig().ui.openDrawerOnBackPressed) { + b.navView.drawer.toggle() } else { - super.onBackPressed() - }*/ + navigateUp() + } } } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java b/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java index 32f769dc..0b2d01b5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Notifier.java @@ -93,8 +93,8 @@ public class Notifier { public boolean shouldBeQuiet() { long now = Time.getNow().getInMillis(); - long start = app.appConfig.quietHoursStart; - long end = app.appConfig.quietHoursEnd; + long start = app.config.getSync().getQuietHoursStart(); + long end = app.config.getSync().getQuietHoursEnd(); if (start > end) { end += 1000 * 60 * 60 * 24; //Log.d(TAG, "Night passing"); @@ -104,7 +104,7 @@ public class Notifier { //Log.d(TAG, "Now is smaller"); } //Log.d(TAG, "Start is "+start+", now is "+now+", end is "+end); - return app.appConfig.quietHoursStart > 0 && now >= start && now <= end; + return start > 0 && now >= start && now <= end; } public int getNotificationDefaults() { @@ -312,7 +312,7 @@ public class Notifier { | | |*/ public void notificationUpdatesShow(String updateVersion, String updateUrl, String updateFilename, boolean updateDirect) { - if (!app.appConfig.notifyAboutUpdates) + if (!app.config.getSync().getNotifyAboutUpdates()) return; Intent notificationIntent = new Intent(app.getContext(), BootReceiver.NotificationActionService.class) .putExtra("update_version", updateVersion) @@ -340,7 +340,7 @@ public class Notifier { } public void notificationUpdatesHide() { - if (!app.appConfig.notifyAboutUpdates) + if (!app.config.getSync().getNotifyAboutUpdates()) return; notificationManager.cancel(ID_UPDATES); } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.kt index 8a28d1f3..9a7d1f03 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/WidgetTimetable.kt @@ -21,7 +21,7 @@ import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import com.mikepenz.iconics.utils.colorInt import com.mikepenz.iconics.utils.sizeDp -import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask +import pl.szczodrzynski.edziennik.data.api.task.EdziennikTask import pl.szczodrzynski.edziennik.data.db.modules.events.Event.TYPE_HOMEWORK import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson import pl.szczodrzynski.edziennik.utils.models.Date @@ -52,9 +52,9 @@ class WidgetTimetable : AppWidgetProvider() { val app = context.applicationContext as App var bellSyncDiffMillis: Long = 0 - if (app.appConfig.bellSyncDiff != null) { - bellSyncDiffMillis = (app.appConfig.bellSyncDiff.hour * 60 * 60 * 1000 + app.appConfig.bellSyncDiff.minute * 60 * 1000 + app.appConfig.bellSyncDiff.second * 1000).toLong() - bellSyncDiffMillis *= app.appConfig.bellSyncMultiplier.toLong() + app.config.timetable.bellSyncDiff?.let { + bellSyncDiffMillis = (it.hour * 60 * 60 * 1000 + it.minute * 60 * 1000 + it.second * 1000).toLong() + bellSyncDiffMillis *= app.config.timetable.bellSyncMultiplier.toLong() bellSyncDiffMillis *= -1 } @@ -255,7 +255,7 @@ class WidgetTimetable : AppWidgetProvider() { // add every event on this lesson for (event in events) { - if (event.startTime != null && event.startTime != lesson.displayStartTime) + if (event.startTime == null || event.startTime != lesson.displayStartTime) continue model.eventColors.add(if (event.type == TYPE_HOMEWORK) ItemWidgetTimetableModel.EVENT_COLOR_HOMEWORK else event.getColor()) } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ServerSync.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ServerSync.kt deleted file mode 100644 index 7114501a..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ServerSync.kt +++ /dev/null @@ -1,179 +0,0 @@ -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() - }} -} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskAllFinishedEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskAllFinishedEvent.kt deleted file mode 100644 index 1bef5708..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskAllFinishedEvent.kt +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) Kuba Szczodrzyński 2019-9-28. - */ - -package pl.szczodrzynski.edziennik.api.v2.events - -class ApiTaskAllFinishedEvent \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskErrorEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskErrorEvent.kt deleted file mode 100644 index 5b76dfe5..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskErrorEvent.kt +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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) \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskFinishedEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskFinishedEvent.kt deleted file mode 100644 index 546fe3ae..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskFinishedEvent.kt +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) Kuba Szczodrzyński 2019-9-28. - */ - -package pl.szczodrzynski.edziennik.api.v2.events - -class ApiTaskFinishedEvent(val profileId: Int) \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/requests/ServiceCloseRequest.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/requests/ServiceCloseRequest.kt deleted file mode 100644 index a859301c..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/requests/ServiceCloseRequest.kt +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) Kuba Szczodrzyński 2019-10-1. - */ - -package pl.szczodrzynski.edziennik.api.v2.events.requests - -class ServiceCloseRequest \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/requests/TaskCancelRequest.kt b/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/requests/TaskCancelRequest.kt deleted file mode 100644 index f40a9455..00000000 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/requests/TaskCancelRequest.kt +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) Kuba Szczodrzyński 2019-10-1. - */ - -package pl.szczodrzynski.edziennik.api.v2.events.requests - -class TaskCancelRequest(val taskId: Int) \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/AbstractConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/AbstractConfig.kt new file mode 100644 index 00000000..d597a119 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/AbstractConfig.kt @@ -0,0 +1,9 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-27. + */ + +package pl.szczodrzynski.edziennik.config + +interface AbstractConfig { + fun set(key: String, value: String?) +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt new file mode 100644 index 00000000..5298e554 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/Config.kt @@ -0,0 +1,89 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-26. + */ + +package pl.szczodrzynski.edziennik.config + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.BuildConfig +import pl.szczodrzynski.edziennik.config.db.ConfigEntry +import pl.szczodrzynski.edziennik.config.utils.ConfigMigration +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.set +import pl.szczodrzynski.edziennik.config.utils.toHashMap +import pl.szczodrzynski.edziennik.data.db.AppDb +import kotlin.coroutines.CoroutineContext + +class Config(val db: AppDb) : CoroutineScope, AbstractConfig { + companion object { + const val DATA_VERSION = 2 + } + + private val job = Job() + override val coroutineContext: CoroutineContext + get() = job + Dispatchers.Default + + val values: HashMap = hashMapOf() + + val ui by lazy { ConfigUI(this) } + val sync by lazy { ConfigSync(this) } + val timetable by lazy { ConfigTimetable(this) } + val grades by lazy { ConfigGrades(this) } + + private var mDataVersion: Int? = null + var dataVersion: Int + get() { mDataVersion = mDataVersion ?: values.get("dataVersion", 0); return mDataVersion ?: 0 } + set(value) { set("dataVersion", value); mDataVersion = value } + + private var mAppVersion: Int? = null + var appVersion: Int + get() { mAppVersion = mAppVersion ?: values.get("appVersion", BuildConfig.VERSION_CODE); return mAppVersion ?: BuildConfig.VERSION_CODE } + set(value) { set("appVersion", value); mAppVersion = value } + + private var mLoginFinished: Boolean? = null + var loginFinished: Boolean + get() { mLoginFinished = mLoginFinished ?: values.get("loginFinished", false); return mLoginFinished ?: false } + set(value) { set("loginFinished", value); mLoginFinished = value } + + private var mDevModePassword: String? = null + var devModePassword: String? + get() { mDevModePassword = mDevModePassword ?: values.get("devModePassword", null as String?); return mDevModePassword } + set(value) { set("devModePassword", value); mDevModePassword = value } + + private var mAppInstalledTime: Long? = null + var appInstalledTime: Long + get() { mAppInstalledTime = mAppInstalledTime ?: values.get("appInstalledTime", 0L); return mAppInstalledTime ?: 0L } + set(value) { set("appInstalledTime", value); mAppInstalledTime = value } + + private var mAppRateSnackbarTime: Long? = null + var appRateSnackbarTime: Long + get() { mAppRateSnackbarTime = mAppRateSnackbarTime ?: values.get("appRateSnackbarTime", 0L); return mAppRateSnackbarTime ?: 0L } + set(value) { set("appRateSnackbarTime", value); mAppRateSnackbarTime = value } + + private var rawEntries: List = db.configDao().getAllNow() + private val profileConfigs: HashMap = hashMapOf() + init { + rawEntries.toHashMap(-1, values) + } + fun migrate(app: App) { + if (dataVersion < DATA_VERSION) + ConfigMigration(app, this) + } + fun getFor(profileId: Int): ProfileConfig { + return profileConfigs[profileId] ?: ProfileConfig(db, profileId, rawEntries) + } + + fun setProfile(profileId: Int) { + } + + override fun set(key: String, value: String?) { + values[key] = value + launch { + db.configDao().add(ConfigEntry(-1, key, value)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigGrades.kt new file mode 100644 index 00000000..130d8129 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigGrades.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-26. + */ + +package pl.szczodrzynski.edziennik.config + +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.set + +class ConfigGrades(private val config: Config) { + companion object { + const val ORDER_BY_DATE_DESC = 0 + const val ORDER_BY_SUBJECT_ASC = 1 + const val ORDER_BY_DATE_ASC = 2 + const val ORDER_BY_SUBJECT_DESC = 3 + } + + private var mOrderBy: Int? = null + var orderBy: Int + get() { mOrderBy = mOrderBy ?: config.values.get("gradesOrderBy", 0); return mOrderBy ?: 0 } + set(value) { config.set("gradesOrderBy", value); mOrderBy = value } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt new file mode 100644 index 00000000..01810824 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigSync.kt @@ -0,0 +1,88 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-26. + */ + +package pl.szczodrzynski.edziennik.config + +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.getIntList +import pl.szczodrzynski.edziennik.config.utils.set + +class ConfigSync(private val config: Config) { + private var mSyncEnabled: Boolean? = null + var enabled: Boolean + get() { mSyncEnabled = mSyncEnabled ?: config.values.get("syncEnabled", true); return mSyncEnabled ?: true } + set(value) { config.set("syncEnabled", value); mSyncEnabled = value } + + private var mSyncOnlyWifi: Boolean? = null + var onlyWifi: Boolean + get() { mSyncOnlyWifi = mSyncOnlyWifi ?: config.values.get("syncOnlyWifi", false); return mSyncOnlyWifi ?: notifyAboutUpdates } + set(value) { config.set("syncOnlyWifi", value); mSyncOnlyWifi = value } + + private var mSyncInterval: Int? = null + var interval: Int + get() { mSyncInterval = mSyncInterval ?: config.values.get("syncInterval", 60*60); return mSyncInterval ?: 60*60 } + set(value) { config.set("syncInterval", value); mSyncInterval = value } + + private var mNotifyAboutUpdates: Boolean? = null + var notifyAboutUpdates: Boolean + get() { mNotifyAboutUpdates = mNotifyAboutUpdates ?: config.values.get("notifyAboutUpdates", true); return mNotifyAboutUpdates ?: true } + set(value) { config.set("notifyAboutUpdates", value); mNotifyAboutUpdates = value } + + /* ____ _ _ _ + / __ \ (_) | | | | + | | | |_ _ _ ___| |_ | |__ ___ _ _ _ __ ___ + | | | | | | | |/ _ \ __| | '_ \ / _ \| | | | '__/ __| + | |__| | |_| | | __/ |_ | | | | (_) | |_| | | \__ \ + \___\_\\__,_|_|\___|\__| |_| |_|\___/ \__,_|_| |__*/ + private var mQuietHoursStart: Long? = null + var quietHoursStart: Long + get() { mQuietHoursStart = mQuietHoursStart ?: config.values.get("quietHoursStart", 0L); return mQuietHoursStart ?: 0L } + set(value) { config.set("quietHoursStart", value); mQuietHoursStart = value } + + private var mQuietHoursEnd: Long? = null + var quietHoursEnd: Long + get() { mQuietHoursEnd = mQuietHoursEnd ?: config.values.get("quietHoursEnd", 0L); return mQuietHoursEnd ?: 0L } + set(value) { config.set("quietHoursEnd", value); mQuietHoursEnd = value } + + private var mQuietDuringLessons: Boolean? = null + var quietDuringLessons: Boolean + get() { mQuietDuringLessons = mQuietDuringLessons ?: config.values.get("quietDuringLessons", false); return mQuietDuringLessons ?: false } + set(value) { config.set("quietDuringLessons", value); mQuietDuringLessons = value } + + /* ______ _____ __ __ _______ _ + | ____/ ____| \/ | |__ __| | | + | |__ | | | \ / | | | ___ | | _____ _ __ ___ + | __|| | | |\/| | | |/ _ \| |/ / _ \ '_ \/ __| + | | | |____| | | | | | (_) | < __/ | | \__ \ + |_| \_____|_| |_| |_|\___/|_|\_\___|_| |_|__*/ + private var mTokenApp: String? = null + var tokenApp: String? + get() { mTokenApp = mTokenApp ?: config.values.get("tokenApp", null as String?); return mTokenApp } + set(value) { config.set("tokenApp", value); mTokenApp = value } + private var mTokenMobidziennik: String? = null + var tokenMobidziennik: String? + get() { mTokenMobidziennik = mTokenMobidziennik ?: config.values.get("tokenMobidziennik", null as String?); return mTokenMobidziennik } + set(value) { config.set("tokenMobidziennik", value); mTokenMobidziennik = value } + private var mTokenLibrus: String? = null + var tokenLibrus: String? + get() { mTokenLibrus = mTokenLibrus ?: config.values.get("tokenLibrus", null as String?); return mTokenLibrus } + set(value) { config.set("tokenLibrus", value); mTokenLibrus = value } + private var mTokenVulcan: String? = null + var tokenVulcan: String? + get() { mTokenVulcan = mTokenVulcan ?: config.values.get("tokenVulcan", null as String?); return mTokenVulcan } + set(value) { config.set("tokenVulcan", value); mTokenVulcan = value } + + private var mTokenMobidziennikList: List? = null + var tokenMobidziennikList: List + get() { mTokenMobidziennikList = mTokenMobidziennikList ?: config.values.getIntList("tokenMobidziennikList", listOf()); return mTokenMobidziennikList ?: listOf() } + set(value) { config.set("tokenMobidziennikList", value); mTokenMobidziennikList = value } + private var mTokenLibrusList: List? = null + var tokenLibrusList: List + get() { mTokenLibrusList = mTokenLibrusList ?: config.values.getIntList("tokenLibrusList", listOf()); return mTokenLibrusList ?: listOf() } + set(value) { config.set("tokenLibrusList", value); mTokenLibrusList = value } + private var mTokenVulcanList: List? = null + var tokenVulcanList: List + get() { mTokenVulcanList = mTokenVulcanList ?: config.values.getIntList("tokenVulcanList", listOf()); return mTokenVulcanList ?: listOf() } + set(value) { config.set("tokenVulcanList", value); mTokenVulcanList = value } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigTimetable.kt new file mode 100644 index 00000000..2418f1d3 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigTimetable.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-26. + */ + +package pl.szczodrzynski.edziennik.config + +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.set +import pl.szczodrzynski.edziennik.utils.models.Time + +class ConfigTimetable(private val config: Config) { + private var mBellSyncMultiplier: Int? = null + var bellSyncMultiplier: Int + get() { mBellSyncMultiplier = mBellSyncMultiplier ?: config.values.get("bellSyncMultiplier", 0); return mBellSyncMultiplier ?: 0 } + set(value) { config.set("bellSyncMultiplier", value); mBellSyncMultiplier = value } + + private var mBellSyncDiff: Time? = null + var bellSyncDiff: Time? + get() { mBellSyncDiff = mBellSyncDiff ?: config.values.get("bellSyncDiff", null as Time?); return mBellSyncDiff } + set(value) { config.set("bellSyncDiff", value); mBellSyncDiff = value } + + private var mCountInSeconds: Boolean? = null + var countInSeconds: Boolean + get() { mCountInSeconds = mCountInSeconds ?: config.values.get("countInSeconds", false); return mCountInSeconds ?: false } + set(value) { config.set("countInSeconds", value); mCountInSeconds = value } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt new file mode 100644 index 00000000..04952148 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ConfigUI.kt @@ -0,0 +1,62 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-26. + */ + +package pl.szczodrzynski.edziennik.config + +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.getIntList +import pl.szczodrzynski.edziennik.config.utils.set +import pl.szczodrzynski.edziennik.ui.modules.home.HomeCardModel + +class ConfigUI(private val config: Config) { + private var mTheme: Int? = null + var theme: Int + get() { mTheme = mTheme ?: config.values.get("theme", 1); return mTheme ?: 1 } + set(value) { config.set("theme", value); mTheme = value } + + private var mLanguage: String? = null + var language: String? + get() { mLanguage = mLanguage ?: config.values.get("language", null as String?); return mLanguage } + set(value) { config.set("language", value); mLanguage = value } + + private var mHeaderBackground: String? = null + var headerBackground: String? + get() { mHeaderBackground = mHeaderBackground ?: config.values.get("headerBg", null as String?); return mHeaderBackground } + set(value) { config.set("headerBg", value); mHeaderBackground = value } + + private var mAppBackground: String? = null + var appBackground: String? + get() { mAppBackground = mAppBackground ?: config.values.get("appBg", null as String?); return mAppBackground } + set(value) { config.set("appBg", value); mAppBackground = value } + + private var mMiniMenuVisible: Boolean? = null + var miniMenuVisible: Boolean + get() { mMiniMenuVisible = mMiniMenuVisible ?: config.values.get("miniMenuVisible", false); return mMiniMenuVisible ?: false } + set(value) { config.set("miniMenuVisible", value); mMiniMenuVisible = value } + + private var mMiniMenuButtons: List? = null + var miniMenuButtons: List + get() { mMiniMenuButtons = mMiniMenuButtons ?: config.values.getIntList("miniMenuButtons", listOf()); return mMiniMenuButtons ?: listOf() } + set(value) { config.set("miniMenuButtons", value); mMiniMenuButtons = value } + + private var mOpenDrawerOnBackPressed: Boolean? = null + var openDrawerOnBackPressed: Boolean + get() { mOpenDrawerOnBackPressed = mOpenDrawerOnBackPressed ?: config.values.get("openDrawerOnBackPressed", false); return mOpenDrawerOnBackPressed ?: false } + set(value) { config.set("openDrawerOnBackPressed", value); mOpenDrawerOnBackPressed = value } + + private var mAgendaViewType: Int? = null + var agendaViewType: Int + get() { mAgendaViewType = mAgendaViewType ?: config.values.get("agendaViewType", 0); return mAgendaViewType ?: 0 } + set(value) { config.set("agendaViewType", value); mAgendaViewType = value } + + private var mHomeCards: List? = null + var homeCards: List + get() { mHomeCards = mHomeCards ?: config.values.get("homeCards", listOf(), HomeCardModel::class.java); return mHomeCards ?: listOf() } + set(value) { config.set("homeCards", value); mHomeCards = value } + + private var mSnowfall: Boolean? = null + var snowfall: Boolean + get() { mSnowfall = mSnowfall ?: config.values.get("snowfall", false); return mSnowfall ?: false } + set(value) { config.set("snowfall", value); mSnowfall = value } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt new file mode 100644 index 00000000..ec5ae3f0 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfig.kt @@ -0,0 +1,52 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-27. + */ + +package pl.szczodrzynski.edziennik.config + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch +import pl.szczodrzynski.edziennik.config.db.ConfigEntry +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.set +import pl.szczodrzynski.edziennik.config.utils.toHashMap +import pl.szczodrzynski.edziennik.data.db.AppDb +import kotlin.coroutines.CoroutineContext + +class ProfileConfig(val db: AppDb, val profileId: Int, rawEntries: List) : CoroutineScope, AbstractConfig { + companion object { + const val DATA_VERSION = 1 + } + + private val job = Job() + override val coroutineContext: CoroutineContext + get() = job + Dispatchers.Default + + val values: HashMap = hashMapOf() + + val grades by lazy { ProfileConfigGrades(this) } + /* + val sync by lazy { ConfigSync(this) } + val timetable by lazy { ConfigTimetable(this) } + val grades by lazy { ConfigGrades(this) }*/ + + private var mDataVersion: Int? = null + var dataVersion: Int + get() { mDataVersion = mDataVersion ?: values.get("dataVersion", 0); return mDataVersion ?: 0 } + set(value) { set("dataVersion", value); mDataVersion = value } + + init { + rawEntries.toHashMap(profileId, values) + /*if (dataVersion < DATA_VERSION) + ProfileConfigMigration(this)*/ + } + + override fun set(key: String, value: String?) { + values[key] = value + launch { + db.configDao().add(ConfigEntry(profileId, key, value)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt new file mode 100644 index 00000000..e90d9be3 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/ProfileConfigGrades.kt @@ -0,0 +1,27 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-27. + */ + +package pl.szczodrzynski.edziennik.config + +import pl.szczodrzynski.edziennik.config.utils.get +import pl.szczodrzynski.edziennik.config.utils.set +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.COLOR_MODE_WEIGHTED +import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile.Companion.YEAR_ALL_GRADES + +class ProfileConfigGrades(private val config: ProfileConfig) { + private var mColorMode: Int? = null + var colorMode: Int + get() { mColorMode = mColorMode ?: config.values.get("gradesColorMode", COLOR_MODE_WEIGHTED); return mColorMode ?: COLOR_MODE_WEIGHTED } + set(value) { config.set("gradesColorMode", value); mColorMode = value } + + private var mYearAverageMode: Int? = null + var yearAverageMode: Int + get() { mYearAverageMode = mYearAverageMode ?: config.values.get("yearAverageMode", YEAR_ALL_GRADES); return mYearAverageMode ?: YEAR_ALL_GRADES } + set(value) { config.set("yearAverageMode", value); mYearAverageMode = value } + + private var mCountZeroToAvg: Boolean? = null + var countZeroToAvg: Boolean + get() { mCountZeroToAvg = mCountZeroToAvg ?: config.values.get("countZeroToAvg", true); return mCountZeroToAvg ?: true } + set(value) { config.set("countZeroToAvg", value); mCountZeroToAvg = value } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/db/ConfigDao.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/db/ConfigDao.kt new file mode 100644 index 00000000..d4665910 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/db/ConfigDao.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-27. + */ + +package pl.szczodrzynski.edziennik.config.db + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query + +@Dao +interface ConfigDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun add(entry: ConfigEntry) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun addAll(list: List) + + @Query("SELECT * FROM config WHERE profileId = -1") + fun getAllNow(): List + + @Query("SELECT * FROM config WHERE profileId = :profileId") + fun getAllNow(profileId: Int): List +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/db/ConfigEntry.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/db/ConfigEntry.kt new file mode 100644 index 00000000..6da441fe --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/db/ConfigEntry.kt @@ -0,0 +1,14 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-26. + */ + +package pl.szczodrzynski.edziennik.config.db + +import androidx.room.Entity + +@Entity(tableName = "config", primaryKeys = ["profileId", "key"]) +data class ConfigEntry( + val profileId: Int = -1, + val key: String, + val value: String? +) \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigExtensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigExtensions.kt new file mode 100644 index 00000000..aec5ebee --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigExtensions.kt @@ -0,0 +1,97 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-27. + */ + +package pl.szczodrzynski.edziennik.config.utils + +import com.google.gson.* +import com.google.gson.reflect.TypeToken +import pl.szczodrzynski.edziennik.config.AbstractConfig +import pl.szczodrzynski.edziennik.config.db.ConfigEntry +import pl.szczodrzynski.edziennik.utils.models.Date +import pl.szczodrzynski.edziennik.utils.models.Time + +private val gson = Gson() + +fun AbstractConfig.set(key: String, value: Int) { + set(key, value.toString()) +} +fun AbstractConfig.set(key: String, value: Boolean) { + set(key, value.toString()) +} +fun AbstractConfig.set(key: String, value: Long) { + set(key, value.toString()) +} +fun AbstractConfig.set(key: String, value: Float) { + set(key, value.toString()) +} +fun AbstractConfig.set(key: String, value: Date?) { + set(key, value?.stringY_m_d) +} +fun AbstractConfig.set(key: String, value: Time?) { + set(key, value?.stringValue) +} +fun AbstractConfig.set(key: String, value: JsonElement?) { + set(key, value?.toString()) +} +fun AbstractConfig.set(key: String, value: List?) { + set(key, value?.let { gson.toJson(it) }) +} +fun AbstractConfig.setStringList(key: String, value: List?) { + set(key, value?.let { gson.toJson(it) }) +} +fun AbstractConfig.setIntList(key: String, value: List?) { + set(key, value?.let { gson.toJson(it) }) +} +fun AbstractConfig.setLongList(key: String, value: List?) { + set(key, value?.let { gson.toJson(it) }) +} + +fun HashMap.get(key: String, default: String?): String? { + return this[key] ?: default +} +fun HashMap.get(key: String, default: Boolean): Boolean { + return this[key]?.toBoolean() ?: default +} +fun HashMap.get(key: String, default: Int): Int { + return this[key]?.toIntOrNull() ?: default +} +fun HashMap.get(key: String, default: Long): Long { + return this[key]?.toLongOrNull() ?: default +} +fun HashMap.get(key: String, default: Float): Float { + return this[key]?.toFloatOrNull() ?: default +} +fun HashMap.get(key: String, default: Date?): Date? { + return this[key]?.let { Date.fromY_m_d(it) } ?: default +} +fun HashMap.get(key: String, default: Time?): Time? { + return this[key]?.let { Time.fromHms(it) } ?: default +} +fun HashMap.get(key: String, default: JsonObject?): JsonObject? { + return this[key]?.let { JsonParser().parse(it)?.asJsonObject } ?: default +} +fun HashMap.get(key: String, default: JsonArray?): JsonArray? { + return this[key]?.let { JsonParser().parse(it)?.asJsonArray } ?: default +} +/* !!! cannot use mutable list here - modifying it will not update the DB */ +fun HashMap.get(key: String, default: List?, classOfT: Class): List? { + return this[key]?.let { ConfigGsonUtils().deserializeList(gson, it, classOfT) } ?: default +} +fun HashMap.getStringList(key: String, default: List?): List? { + return this[key]?.let { gson.fromJson>(it, object: TypeToken>(){}.type) } ?: default +} +fun HashMap.getIntList(key: String, default: List?): List? { + return this[key]?.let { gson.fromJson>(it, object: TypeToken>(){}.type) } ?: default +} +fun HashMap.getLongList(key: String, default: List?): List? { + return this[key]?.let { gson.fromJson>(it, object: TypeToken>(){}.type) } ?: default +} + +fun List.toHashMap(profileId: Int, map: HashMap) { + map.clear() + forEach { + if (it.profileId == profileId) + map[it.key] = it.value + } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigGsonUtils.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigGsonUtils.kt new file mode 100644 index 00000000..eb04578d --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigGsonUtils.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-12-2. + */ +package pl.szczodrzynski.edziennik.config.utils + +import com.google.gson.Gson +import com.google.gson.JsonParser +import pl.szczodrzynski.edziennik.getInt +import pl.szczodrzynski.edziennik.ui.modules.home.HomeCardModel +import pl.szczodrzynski.edziennik.utils.models.Time + +class ConfigGsonUtils { + fun deserializeList(gson: Gson, str: String?, classOfT: Class): List { + val json = JsonParser().parse(str) + val list: MutableList = mutableListOf() + if (!json.isJsonArray) + return list + + json.asJsonArray.forEach { e -> + when (classOfT) { + String::class.java -> { + list += e.asString as T + } + HomeCardModel::class.java -> { + val o = e.asJsonObject + list += HomeCardModel( + o.getInt("profileId", 0), + o.getInt("cardId", 0) + ) as T + } + Time::class.java -> { + val o = e.asJsonObject + list += Time( + o.getInt("hour", 0), + o.getInt("minute", 0), + o.getInt("second", 0) + ) as T + } + } + } + + return list + } +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigMigration.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigMigration.kt new file mode 100644 index 00000000..4ed95f6f --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ConfigMigration.kt @@ -0,0 +1,84 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-27. + */ + +package pl.szczodrzynski.edziennik.config.utils + +import android.content.Context +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.BuildConfig +import pl.szczodrzynski.edziennik.MainActivity +import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_LIBRUS +import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_MOBIDZIENNIK +import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_VULCAN +import pl.szczodrzynski.edziennik.config.Config +import pl.szczodrzynski.edziennik.utils.models.Time + +class ConfigMigration(app: App, config: Config) { + init { config.apply { + val p = app.getSharedPreferences("pl.szczodrzynski.edziennik_profiles", Context.MODE_PRIVATE) + val s = "app.appConfig" + + if (dataVersion < 1) { + ui.theme = p.getString("$s.appTheme", null)?.toIntOrNull() ?: 1 + sync.enabled = p.getString("$s.registerSyncEnabled", null)?.toBoolean() ?: true + sync.interval = p.getString("$s.registerSyncEnabled", null)?.toIntOrNull() ?: 3600 + val oldButtons = p.getString("$s.miniDrawerButtonIds", null)?.let { str -> + str.replace("[\\[\\]]*".toRegex(), "") + .split(",\\s?".toRegex()) + .mapNotNull { it.toIntOrNull() } + } + ui.miniMenuButtons = oldButtons ?: listOf( + MainActivity.DRAWER_ITEM_HOME, + MainActivity.DRAWER_ITEM_TIMETABLE, + MainActivity.DRAWER_ITEM_AGENDA, + MainActivity.DRAWER_ITEM_GRADES, + MainActivity.DRAWER_ITEM_MESSAGES, + MainActivity.DRAWER_ITEM_HOMEWORK, + MainActivity.DRAWER_ITEM_SETTINGS + ) + dataVersion = 1 + } + if (dataVersion < 2) { + devModePassword = p.getString("$s.devModePassword", null).fix() + sync.tokenApp = p.getString("$s.fcmToken", null).fix() + timetable.bellSyncMultiplier = p.getString("$s.bellSyncMultiplier", null)?.toIntOrNull() ?: 0 + sync.quietHoursStart = p.getString("$s.quietHoursStart", null)?.toLongOrNull() ?: 0 + appRateSnackbarTime = p.getString("$s.appRateSnackbarTime", null)?.toLongOrNull() ?: 0 + sync.quietHoursEnd = p.getString("$s.quietHoursEnd", null)?.toLongOrNull() ?: 0 + timetable.countInSeconds = p.getString("$s.countInSeconds", null)?.toBoolean() ?: false + ui.headerBackground = p.getString("$s.headerBackground", null).fix() + ui.appBackground = p.getString("$s.appBackground", null).fix() + ui.language = p.getString("$s.language", null).fix() + appVersion = p.getString("$s.lastAppVersion", null)?.toIntOrNull() ?: BuildConfig.VERSION_CODE + appInstalledTime = p.getString("$s.appInstalledTime", null)?.toLongOrNull() ?: 0 + grades.orderBy = p.getString("$s.gradesOrderBy", null)?.toIntOrNull() ?: 0 + sync.quietDuringLessons = p.getString("$s.quietDuringLessons", null)?.toBoolean() ?: false + ui.miniMenuVisible = p.getString("$s.miniDrawerVisible", null)?.toBoolean() ?: false + loginFinished = p.getString("$s.loginFinished", null)?.toBoolean() ?: false + sync.onlyWifi = p.getString("$s.registerSyncOnlyWifi", null)?.toBoolean() ?: false + sync.notifyAboutUpdates = p.getString("$s.notifyAboutUpdates", null)?.toBoolean() ?: true + timetable.bellSyncDiff = p.getString("$s.bellSyncDiff", null)?.let { Gson().fromJson(it, Time::class.java) } + + sync.tokenMobidziennikList = listOf() + sync.tokenVulcanList = listOf() + sync.tokenLibrusList = listOf() + val tokens = p.getString("$s.fcmTokens", null)?.let { Gson().fromJson>>>(it, object: TypeToken>>>(){}.type) } + tokens?.forEach { + val token = it.value.first + when (it.key) { + LOGIN_TYPE_MOBIDZIENNIK -> sync.tokenMobidziennik = token + LOGIN_TYPE_VULCAN -> sync.tokenVulcan = token + LOGIN_TYPE_LIBRUS -> sync.tokenLibrus = token + } + } + dataVersion = 2 + } + }} + + private fun String?.fix(): String? { + return this?.replace("\"", "")?.let { if (it == "null") null else it } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt new file mode 100644 index 00000000..31c4dbc3 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/utils/ProfileConfigMigration.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-12-1. + */ + +package pl.szczodrzynski.edziennik.config.utils + +import android.content.Context +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.config.Config + +class ProfileConfigMigration(app: App, config: Config) { + init { config.apply { + val p = app.getSharedPreferences("pl.szczodrzynski.edziennik_profiles", Context.MODE_PRIVATE) + val s = "app.appConfig" + + if (dataVersion < 1) { + + //dataVersion = 1 + } + if (dataVersion < 2) { + //gradesColorMode do profilu ! + //agendaViewType do profilu ! + // app.appConfig.dontCountZeroToAverage do profilu ! + } + }} +} \ No newline at end of file diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/ApiService.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/ApiService.kt index 6a5bde01..ae0e7a18 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/ApiService.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/ApiService.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-28. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api import android.app.Service import android.content.Context @@ -12,15 +12,13 @@ import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.events.* -import pl.szczodrzynski.edziennik.api.v2.events.requests.ServiceCloseRequest -import pl.szczodrzynski.edziennik.api.v2.events.requests.TaskCancelRequest -import pl.szczodrzynski.edziennik.api.v2.events.task.EdziennikTask -import pl.szczodrzynski.edziennik.api.v2.events.task.ErrorReportTask -import pl.szczodrzynski.edziennik.api.v2.events.task.IApiTask -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.data.api.events.* +import pl.szczodrzynski.edziennik.data.api.events.requests.ServiceCloseRequest +import pl.szczodrzynski.edziennik.data.api.events.requests.TaskCancelRequest +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.task.* +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull import pl.szczodrzynski.edziennik.utils.Utils.d import kotlin.math.min import kotlin.math.roundToInt @@ -40,9 +38,11 @@ class ApiService : Service() { private val app by lazy { applicationContext as App } + private val syncingProfiles = mutableListOf() + private val finishingTaskQueue = mutableListOf( - NotifyTask(), - ErrorReportTask() + SzkolnyTask.sync(syncingProfiles), + NotifyTask() ) private val taskQueue = mutableListOf() private val errorList = mutableListOf() @@ -156,11 +156,14 @@ class ApiService : Service() { // post an event EventBus.getDefault().post(ApiTaskStartedEvent(taskProfileId, task.profile)) + task.profile?.let { syncingProfiles.add(it) } + try { when (task) { is EdziennikTask -> task.run(app, taskCallback) is NotifyTask -> task.run(app, taskCallback) is ErrorReportTask -> task.run(app, taskCallback, notification, errorList) + is SzkolnyTask -> task.run(app, taskCallback) } } catch (e: Exception) { taskCallback.onError(ApiError(TAG, EXCEPTION_API_TASK).withThrowable(e)) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt index 3c2cc86e..d8bd5c8b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Constants.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-19. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api import android.os.Build import pl.szczodrzynski.edziennik.BuildConfig diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/DataNotifications.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/DataNotifications.kt similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/DataNotifications.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/DataNotifications.kt index 12c10dcd..18583986 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/DataNotifications.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/DataNotifications.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA 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_TIMETABLE import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.models.Data +import pl.szczodrzynski.edziennik.data.api.models.Data import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade.* diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/EdziennikNotification.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/EdziennikNotification.kt similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/EdziennikNotification.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/EdziennikNotification.kt index 2db9ecf1..a78f8ab1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/EdziennikNotification.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/EdziennikNotification.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-1. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api import android.app.Notification import android.app.NotificationManager @@ -137,4 +137,4 @@ class EdziennikNotification(val context: Context) { notificationManager.notify(NOTIFICATION_ID, notification) } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/EndpointChooser.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/EndpointChooser.kt similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/EndpointChooser.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/EndpointChooser.kt index c4a97f98..84cdaee8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/EndpointChooser.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/EndpointChooser.kt @@ -1,8 +1,8 @@ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.models.Data -import pl.szczodrzynski.edziennik.api.v2.models.Feature -import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod +import pl.szczodrzynski.edziennik.data.api.models.Data +import pl.szczodrzynski.edziennik.data.api.models.Feature +import pl.szczodrzynski.edziennik.data.api.models.LoginMethod 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_NEVER @@ -80,4 +80,4 @@ fun Data.prepare(loginMethods: List, features: List, featu progressCount = targetLoginMethodIds.size + targetEndpointIds.size progressStep = if (progressCount <= 0) 0f else 100f / progressCount.toFloat() -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Errors.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Errors.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt index c6a2a35a..8ad2024a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Errors.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-21. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api /*const val CODE_OTHER = 0 const val CODE_OK = 1 @@ -168,7 +168,9 @@ const val EXCEPTION_LIBRUS_API_REQUEST = 904 const val EXCEPTION_LIBRUS_SYNERGIA_REQUEST = 905 const val EXCEPTION_MOBIDZIENNIK_WEB_REQUEST = 906 const val EXCEPTION_VULCAN_API_REQUEST = 907 -const val EXCEPTION_NOTIFY_AND_SYNC = 910 +const val EXCEPTION_MOBIDZIENNIK_WEB_FILE_REQUEST = 908 +const val EXCEPTION_LIBRUS_MESSAGES_FILE_REQUEST = 909 +const val EXCEPTION_NOTIFY = 910 const val EXCEPTION_LIBRUS_MESSAGES_REQUEST = 911 const val EXCEPTION_IDZIENNIK_WEB_REQUEST = 912 const val EXCEPTION_IDZIENNIK_WEB_API_REQUEST = 913 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Features.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Features.kt similarity index 98% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Features.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Features.kt index 78b77f07..40f24048 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Features.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Features.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-29. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_ANNOUNCEMENTS @@ -82,4 +82,4 @@ object Features { else -> getAllFeatures() } + getAllNecessary()).sorted() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/LoginMethods.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/LoginMethods.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt index 1d4b6288..41350c84 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/LoginMethods.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt @@ -2,19 +2,19 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-20. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLoginApi -import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLoginWeb -import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginApi -import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginMessages -import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginPortal -import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginSynergia -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.login.MobidziennikLoginWeb -import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod -import pl.szczodrzynski.edziennik.api.v2.template.login.TemplateLoginApi -import pl.szczodrzynski.edziennik.api.v2.template.login.TemplateLoginWeb -import pl.szczodrzynski.edziennik.api.v2.vulcan.login.VulcanLoginApi +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLoginApi +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLoginWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginMessages +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginPortal +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginSynergia +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login.MobidziennikLoginWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.template.login.TemplateLoginApi +import pl.szczodrzynski.edziennik.data.api.edziennik.template.login.TemplateLoginWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLoginApi +import pl.szczodrzynski.edziennik.data.api.models.LoginMethod // librus // mobidziennik @@ -138,4 +138,4 @@ val templateLoginMethods = listOf( LoginMethod(LOGIN_TYPE_TEMPLATE, LOGIN_METHOD_TEMPLATE_API, TemplateLoginApi::class.java) .withIsPossible { _, _ -> true } .withRequiredLoginMethod { _, _ -> LOGIN_METHOD_TEMPLATE_WEB } -) \ No newline at end of file +) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Regexes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Regexes.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Regexes.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/Regexes.kt index b6039a46..87e885a6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/Regexes.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Regexes.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2 +package pl.szczodrzynski.edziennik.data.api object Regexes { val MOBIDZIENNIK_GRADES_SUBJECT_NAME by lazy { @@ -24,7 +24,7 @@ object Regexes { """Liczona do średniej:.*?nie
""".toRegex(RegexOption.DOT_MATCHES_ALL) } val MOBIDZIENNIK_GRADES_DETAILS by lazy { - """(.+?).*?.+?.*?\((.+?)\).*?.*?Wartość oceny:.*?([0-9.]+).*?Wpisał\(a\):.*?(.+?)""".toRegex(RegexOption.DOT_MATCHES_ALL) + """(.+?).*?.+?.*?(?:\((.+?)\).*?)?.*?Wartość oceny:.*?([0-9.]+).*?Wpisał\(a\):.*?(.+?).*?(?:Komentarz:.*?(.+?))?""".toRegex(RegexOption.DOT_MATCHES_ALL) } val MOBIDZIENNIK_EVENT_TYPE by lazy { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/DataIdziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/DataIdziennik.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/DataIdziennik.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/DataIdziennik.kt index 3db12ef9..c3bd925a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/DataIdziennik.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/DataIdziennik.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-25. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik import androidx.core.util.set import okhttp3.Cookie import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_API -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_WEB -import pl.szczodrzynski.edziennik.api.v2.models.Data +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_API +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_WEB +import pl.szczodrzynski.edziennik.data.api.models.Data 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.subjects.Subject diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/Idziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/Idziennik.kt similarity index 79% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/Idziennik.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/Idziennik.kt index 53361e28..98010dc8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/Idziennik.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/Idziennik.kt @@ -2,20 +2,21 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-25. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410 -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikData -import pl.szczodrzynski.edziennik.api.v2.idziennik.firstlogin.IdziennikFirstLogin -import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLogin -import pl.szczodrzynski.edziennik.api.v2.idziennikLoginMethods -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.prepare +import pl.szczodrzynski.edziennik.data.api.CODE_INTERNAL_LIBRUS_ACCOUNT_410 +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikData +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.firstlogin.IdziennikFirstLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLogin +import pl.szczodrzynski.edziennik.data.api.idziennikLoginMethods +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.prepare 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.profiles.Profile import pl.szczodrzynski.edziennik.utils.Utils.d @@ -37,7 +38,7 @@ class Idziennik(val app: App, val profile: Profile?, val loginStore: LoginStore, private fun completed() { data.saveData() - data.notifyAndSyncEvents { + data.notify { callback.onCompleted() } } @@ -70,7 +71,7 @@ class Idziennik(val app: App, val profile: Profile?, val loginStore: LoginStore, } - override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) { + override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) { } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/IdziennikFeatures.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/IdziennikFeatures.kt index f57a4bb9..02aaabb2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/IdziennikFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/IdziennikFeatures.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-25. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.Feature +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.models.Feature const val ENDPOINT_IDZIENNIK_WEB_TIMETABLE = 1030 const val ENDPOINT_IDZIENNIK_WEB_GRADES = 1040 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikApi.kt similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikApi.kt index 66a87dfa..05bd260d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikApi.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-29. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data import com.google.gson.JsonArray import com.google.gson.JsonElement @@ -11,9 +11,9 @@ import com.google.gson.JsonParser import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.TextCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.utils.Utils import java.net.HttpURLConnection diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikData.kt similarity index 86% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikData.kt index c1a7ef8f..7b285db9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikData.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-25. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.idziennik.* -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.api.IdziennikApiCurrentRegister -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.api.IdziennikApiMessagesInbox -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.api.IdziennikApiMessagesSent -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.web.* +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.* +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api.IdziennikApiCurrentRegister +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api.IdziennikApiMessagesInbox +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api.IdziennikApiMessagesSent +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web.* import pl.szczodrzynski.edziennik.utils.Utils class IdziennikData(val data: DataIdziennik, val onSuccess: () -> Unit) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikWeb.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikWeb.kt index 5485e951..c7b6820a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/IdziennikWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/IdziennikWeb.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-25. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data import com.google.gson.JsonArray import com.google.gson.JsonObject @@ -10,9 +10,9 @@ import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.JsonCallbackHandler import im.wangchao.mhttp.callback.TextCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.utils.Utils.d import java.net.HttpURLConnection.HTTP_INTERNAL_ERROR import java.net.HttpURLConnection.HTTP_UNAUTHORIZED diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiCurrentRegister.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiCurrentRegister.kt similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiCurrentRegister.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiCurrentRegister.kt index 2366e625..1970c225 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiCurrentRegister.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiCurrentRegister.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-29. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.DAY -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_API_CURRENT_REGISTER -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_API_CURRENT_REGISTER -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikApi +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_API_CURRENT_REGISTER +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_API_CURRENT_REGISTER +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikApi import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.getInt diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiMessagesInbox.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiMessagesInbox.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiMessagesInbox.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiMessagesInbox.kt index abe3c140..5542db6c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiMessagesInbox.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiMessagesInbox.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-30. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api import com.google.gson.JsonArray -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_API_MESSAGES_INBOX -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_INBOX -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikApi +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_API_MESSAGES_INBOX +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_INBOX +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikApi import pl.szczodrzynski.edziennik.asJsonObjectList import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS import pl.szczodrzynski.edziennik.data.db.modules.messages.Message diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiMessagesSent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiMessagesSent.kt similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiMessagesSent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiMessagesSent.kt index 6c809d8b..a8850416 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/api/IdziennikApiMessagesSent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/api/IdziennikApiMessagesSent.kt @@ -2,15 +2,15 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-30. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.api import com.google.gson.JsonArray import pl.szczodrzynski.edziennik.DAY import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_API_MESSAGES_SENT -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_SENT -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikApi +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_API_MESSAGES_SENT +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_API_MESSAGES_SENT +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikApi import pl.szczodrzynski.edziennik.asJsonObjectList import pl.szczodrzynski.edziennik.data.db.modules.messages.Message import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebAnnouncements.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebAnnouncements.kt similarity index 83% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebAnnouncements.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebAnnouncements.kt index 5f700482..20844220 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebAnnouncements.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebAnnouncements.kt @@ -2,16 +2,16 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-28. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web import com.google.gson.JsonArray import com.google.gson.JsonObject -import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_ANNOUNCEMENTS -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_ANNOUNCEMENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_ANNOUNCEMENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError 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.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebAttendance.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebAttendance.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebAttendance.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebAttendance.kt index 1bcbddac..78f8e8b4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebAttendance.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebAttendance.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-28. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web -import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_ATTENDANCE -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_ATTENDANCE -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_ATTENDANCE +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_ATTENDANCE +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.crc16 import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebExams.kt similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebExams.kt index 01b31ad0..bf32188c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebExams.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebExams.kt @@ -2,17 +2,17 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-28. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web 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.api.v2.IDZIENNIK_WEB_EXAMS -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_EXAMS -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_EXAMS +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_EXAMS +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +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.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata @@ -59,13 +59,14 @@ class IdziennikWebExams(override val data: DataIdziennik, json.getJsonArray("ListK")?.asJsonObjectList()?.forEach { exam -> val id = exam.getLong("_recordId") ?: return@forEach val examDate = Date.fromY_m_d(exam.getString("data") ?: return@forEach) - val subjectId = data.getSubject(exam.getString("przedmiot") ?: return@forEach, - -1, "").id - val teacherId = data.getTeacherByLastFirst(exam.getString("wpisal") - ?: return@forEach).id + val subjectName = exam.getString("przedmiot") ?: return@forEach + val subjectId = data.getSubject(subjectName, null, subjectName).id + val teacherName = exam.getString("wpisal") ?: return@forEach + val teacherId = data.getTeacherByLastFirst(teacherName).id + val topic = exam.getString("zakres") ?: "" + val lessonList = data.db.timetableDao().getForDateNow(profileId, examDate) val startTime = lessonList.firstOrNull { it.subjectId == subjectId }?.startTime - val topic = exam.getString("zakres") ?: "" val eventType = when (exam.getString("rodzaj")) { "sprawdzian/praca klasowa" -> Event.TYPE_EXAM diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebGrades.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebGrades.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebGrades.kt index e99387f6..438d334e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebGrades.kt @@ -2,16 +2,16 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-28. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web import android.graphics.Color import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_GRADES -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_GRADES -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError 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.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebHomework.kt similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebHomework.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebHomework.kt index d749cea5..7cfc5b91 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebHomework.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebHomework.kt @@ -2,17 +2,17 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-25 */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web 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.api.v2.IDZIENNIK_WEB_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_HOMEWORK +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_HOMEWORK +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +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.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata @@ -50,10 +50,10 @@ class IdziennikWebHomework(override val data: DataIdziennik, json.getJsonArray("ListK")?.asJsonObjectList()?.forEach { homework -> val id = homework.getLong("_recordId") ?: return@forEach val eventDate = Date.fromY_m_d(homework.getString("dataO") ?: return@forEach) - val subjectId = data.getSubject(homework.getString("przed") ?: return@forEach, - -1, "").id - val teacherId = data.getTeacherByLastFirst(homework.getString("usr") - ?: return@forEach).id + val subjectName = homework.getString("przed") ?: return@forEach + val subjectId = data.getSubject(subjectName, null, subjectName).id + val teacherName = homework.getString("usr") ?: return@forEach + val teacherId = data.getTeacherByLastFirst(teacherName).id val lessonList = data.db.timetableDao().getForDateNow(profileId, eventDate) val startTime = lessonList.firstOrNull { it.subjectId == subjectId }?.displayStartTime val topic = homework.getString("tytul") ?: "" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebNotices.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebNotices.kt similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebNotices.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebNotices.kt index 7cdaf3af..cfd0d5f6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebNotices.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebNotices.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-28. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web -import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_NOTICES -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_NOTICES -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_NOTICES +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_NOTICES +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.crc16 import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebProposedGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebProposedGrades.kt similarity index 61% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebProposedGrades.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebProposedGrades.kt index 376aa8cf..701620de 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebProposedGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebProposedGrades.kt @@ -2,29 +2,32 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-28. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web -import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_MISSING_GRADES -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_MISSING_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.asJsonObjectList 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.TYPE_SEMESTER1_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.getJsonArray import pl.szczodrzynski.edziennik.getJsonObject +import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.utils.Utils.getWordGradeValue class IdziennikWebProposedGrades(override val data: DataIdziennik, - val onSuccess: () -> Unit) : IdziennikWeb(data) { + val onSuccess: () -> Unit) : IdziennikWeb(data) { companion object { private const val TAG = "IdziennikWebProposedGrades" } - init { + init { data.profile?.also { profile -> webApiGet(TAG, IDZIENNIK_WEB_MISSING_GRADES, mapOf( "idPozDziennika" to data.registerId )) { result -> @@ -34,17 +37,17 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik, return@webApiGet } - val jSubjects = json.getAsJsonArray("Przedmioty") - for (jSubjectEl in jSubjects) { - val jSubject = jSubjectEl.getAsJsonObject() - // jSubject - 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() + json.getJsonArray("Przedmioty")?.asJsonObjectList()?.forEach { subject -> + val subjectName = subject.getString("Przedmiot") ?: return@forEach + val subjectObject = data.getSubject(subjectName, null, subjectName) + + val semester1Proposed = subject.getString("OcenaSem1") ?: "" val semester1Value = getWordGradeValue(semester1Proposed) + val semester1Id = subjectObject.id * (-100) - 1 + + val semester2Proposed = subject.getString("OcenaSem2") ?: "" val semester2Value = getWordGradeValue(semester2Proposed) - val semester1Id = rSubject.id * -100 - 1 - val semester2Id = rSubject.id * -100 - 2 + val semester2Id = subjectObject.id * (-100) - 2 if (semester1Proposed != "") { val gradeObject = Grade( @@ -58,17 +61,18 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik, 0f, 1, -1, - rSubject.id) - - gradeObject.type = TYPE_SEMESTER1_PROPOSED + subjectObject.id + ).apply { + type = TYPE_SEMESTER1_PROPOSED + } data.gradeList.add(gradeObject) data.metadataList.add(Metadata( profileId, Metadata.TYPE_GRADE, gradeObject.id, - profile?.empty ?: false, - profile?.empty ?: false, + profile.empty, + profile.empty, System.currentTimeMillis() )) } @@ -85,17 +89,18 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik, 0f, 2, -1, - rSubject.id) - - gradeObject.type = TYPE_YEAR_PROPOSED + subjectObject.id + ).apply { + type = TYPE_YEAR_PROPOSED + } data.gradeList.add(gradeObject) data.metadataList.add(Metadata( profileId, Metadata.TYPE_GRADE, gradeObject.id, - profile?.empty ?: false, - profile?.empty ?: false, + profile.empty, + profile.empty, System.currentTimeMillis() )) } @@ -104,5 +109,5 @@ class IdziennikWebProposedGrades(override val data: DataIdziennik, data.setSyncNext(ENDPOINT_IDZIENNIK_WEB_PROPOSED_GRADES, SYNC_ALWAYS) onSuccess() } - } + }} } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebTimetable.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebTimetable.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebTimetable.kt index e2250c38..d85e5692 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/data/web/IdziennikWebTimetable.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/data/web/IdziennikWebTimetable.kt @@ -2,17 +2,17 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-22 */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.web import androidx.core.util.set import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_TIMETABLE -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.ENDPOINT_IDZIENNIK_WEB_TIMETABLE -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.ERROR_IDZIENNIK_WEB_REQUEST_NO_DATA +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_TIMETABLE +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.ENDPOINT_IDZIENNIK_WEB_TIMETABLE +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/firstlogin/IdziennikFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/firstlogin/IdziennikFirstLogin.kt similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/firstlogin/IdziennikFirstLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/firstlogin/IdziennikFirstLogin.kt index b282643b..6ef9950f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/firstlogin/IdziennikFirstLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/firstlogin/IdziennikFirstLogin.kt @@ -2,17 +2,17 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-27. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.firstlogin +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.firstlogin import org.greenrobot.eventbus.EventBus -import pl.szczodrzynski.edziennik.api.v2.ERROR_LOGIN_IDZIENNIK_FIRST_NO_SCHOOL_YEAR -import pl.szczodrzynski.edziennik.api.v2.IDZIENNIK_WEB_SETTINGS -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.events.FirstLoginFinishedEvent -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.idziennik.data.IdziennikWeb -import pl.szczodrzynski.edziennik.api.v2.idziennik.login.IdziennikLoginWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_LOGIN_IDZIENNIK_FIRST_NO_SCHOOL_YEAR +import pl.szczodrzynski.edziennik.data.api.IDZIENNIK_WEB_SETTINGS +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.data.IdziennikWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login.IdziennikLoginWeb +import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile import pl.szczodrzynski.edziennik.fixName import pl.szczodrzynski.edziennik.get diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLogin.kt similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLogin.kt index ff6adb6e..e1cef5c1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLogin.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-25. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.login +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_API -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_IDZIENNIK_WEB -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_API +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_IDZIENNIK_WEB +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik import pl.szczodrzynski.edziennik.utils.Utils class IdziennikLogin(val data: DataIdziennik, val onSuccess: () -> Unit) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLoginApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLoginApi.kt similarity index 71% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLoginApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLoginApi.kt index 4782b980..2afe481d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLoginApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLoginApi.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-27. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.login +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik class IdziennikLoginApi(val data: DataIdziennik, val onSuccess: () -> Unit) { companion object { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLoginWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLoginWeb.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLoginWeb.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLoginWeb.kt index 88729206..9f10268e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/idziennik/login/IdziennikLoginWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/idziennik/login/IdziennikLoginWeb.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-26. */ -package pl.szczodrzynski.edziennik.api.v2.idziennik.login +package pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.login import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response @@ -10,9 +10,9 @@ import im.wangchao.mhttp.callback.TextCallbackHandler import okhttp3.Cookie import pl.szczodrzynski.edziennik.HOUR import pl.szczodrzynski.edziennik.MINUTE -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.idziennik.DataIdziennik -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.DataIdziennik +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.get import pl.szczodrzynski.edziennik.getUnixDate import pl.szczodrzynski.edziennik.utils.Utils diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/DataLibrus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/DataLibrus.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt index a18b4511..9ccdf5c6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/DataLibrus.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/DataLibrus.kt @@ -2,15 +2,15 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-21. */ -package pl.szczodrzynski.edziennik.api.v2.librus +package pl.szczodrzynski.edziennik.data.api.edziennik.librus import okhttp3.Cookie 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.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.currentTimeUnix import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile @@ -148,16 +148,16 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app */ private var mApiCode: String? = null var apiCode: String? - get() { mApiCode = mApiCode ?: profile?.getStudentData("accountCode", null); return mApiCode } - set(value) { profile?.putStudentData("accountCode", value) ?: return; mApiCode = value } + get() { mApiCode = mApiCode ?: loginStore.getLoginData("accountCode", null); return mApiCode } + set(value) { loginStore.putLoginData("accountCode", value) ?: return; mApiCode = value } /** * A JST login PIN. * Used only during first login in JST mode. */ private var mApiPin: String? = null var apiPin: String? - get() { mApiPin = mApiPin ?: profile?.getStudentData("accountPin", null); return mApiPin } - set(value) { profile?.putStudentData("accountPin", value) ?: return; mApiPin = value } + get() { mApiPin = mApiPin ?: loginStore.getLoginData("accountPin", null); return mApiPin } + set(value) { loginStore.putLoginData("accountPin", value) ?: return; mApiPin = value } /** * A Synergia API access token. @@ -168,7 +168,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app private var mApiAccessToken: String? = null var apiAccessToken: String? get() { mApiAccessToken = mApiAccessToken ?: profile?.getStudentData("accountToken", null); return mApiAccessToken } - set(value) { profile?.putStudentData("accountToken", value) ?: return; mApiAccessToken = value } + set(value) { mApiAccessToken = value; profile?.putStudentData("accountToken", value) ?: return; } /** * A Synergia API refresh token. * Used when refreshing the [apiAccessToken] in JST, Synergia modes. @@ -176,7 +176,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app private var mApiRefreshToken: String? = null var apiRefreshToken: String? get() { mApiRefreshToken = mApiRefreshToken ?: profile?.getStudentData("accountRefreshToken", null); return mApiRefreshToken } - set(value) { profile?.putStudentData("accountRefreshToken", value) ?: return; mApiRefreshToken = value } + set(value) { mApiRefreshToken = value; profile?.putStudentData("accountRefreshToken", value) ?: return; } /** * The expiry time for [apiAccessToken], as a UNIX timestamp. * Used when refreshing the [apiAccessToken] in JST, Synergia modes. @@ -185,7 +185,7 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app private var mApiTokenExpiryTime: Long? = null var apiTokenExpiryTime: Long get() { mApiTokenExpiryTime = mApiTokenExpiryTime ?: profile?.getStudentData("accountTokenTime", 0L); return mApiTokenExpiryTime ?: 0L } - set(value) { profile?.putStudentData("accountTokenTime", value) ?: return; mApiTokenExpiryTime = value } + set(value) { mApiTokenExpiryTime = value; profile?.putStudentData("accountTokenTime", value) ?: return; } /* _____ _ / ____| (_) @@ -269,4 +269,4 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app var enableDescriptiveGrades: Boolean get() { mEnableDescriptiveGrades = mEnableDescriptiveGrades ?: profile?.getStudentData("enableDescriptiveGrades", true); return mEnableDescriptiveGrades ?: true } set(value) { profile?.putStudentData("enableDescriptiveGrades", value) ?: return; mEnableDescriptiveGrades = value } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt index 8f281480..842938c6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/Librus.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/Librus.kt @@ -2,21 +2,22 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-21. */ -package pl.szczodrzynski.edziennik.api.v2.librus +package pl.szczodrzynski.edziennik.data.api.edziennik.librus import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusData -import pl.szczodrzynski.edziennik.api.v2.librus.data.messages.LibrusMessagesGetAttachment -import pl.szczodrzynski.edziennik.api.v2.librus.data.messages.LibrusMessagesGetMessage -import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaMarkAllAnnouncementsAsRead -import pl.szczodrzynski.edziennik.api.v2.librus.firstlogin.LibrusFirstLogin -import pl.szczodrzynski.edziennik.api.v2.librus.login.* -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusData +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetAttachment +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetMessage +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaMarkAllAnnouncementsAsRead +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.firstlogin.LibrusFirstLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.* +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface +import pl.szczodrzynski.edziennik.data.api.models.ApiError 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.profiles.Profile import pl.szczodrzynski.edziennik.utils.Utils.d @@ -38,7 +39,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va private fun completed() { data.saveData() - data.notifyAndSyncEvents { + data.notify { callback.onCompleted() } } @@ -105,12 +106,12 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va } } - override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) { + override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) { LibrusLoginPortal(data) { LibrusLoginApi(data) { LibrusLoginSynergia(data) { LibrusLoginMessages(data) { - LibrusMessagesGetAttachment(data, messageId, attachmentId, attachmentName) { + LibrusMessagesGetAttachment(data, message, attachmentId, attachmentName) { completed() } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/LibrusFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt similarity index 62% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/LibrusFeatures.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt index 02bd46d7..132d6af1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/LibrusFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/LibrusFeatures.kt @@ -2,57 +2,58 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.librus +package pl.szczodrzynski.edziennik.data.api.edziennik.librus -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.Feature +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.models.Feature -const val ENDPOINT_LIBRUS_API_ME = 1001 -const val ENDPOINT_LIBRUS_API_SCHOOLS = 1002 -const val ENDPOINT_LIBRUS_API_CLASSES = 1003 -const val ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES = 1004 -const val ENDPOINT_LIBRUS_API_UNITS = 1005 -const val ENDPOINT_LIBRUS_API_USERS = 1006 -const val ENDPOINT_LIBRUS_API_SUBJECTS = 1007 -const val ENDPOINT_LIBRUS_API_CLASSROOMS = 1008 -const val ENDPOINT_LIBRUS_API_PUSH_CONFIG = 1010 -const val ENDPOINT_LIBRUS_API_TIMETABLES = 1015 -const val ENDPOINT_LIBRUS_API_SUBSTITUTIONS = 1016 -const val ENDPOINT_LIBRUS_API_NORMAL_GC = 1021 -const val ENDPOINT_LIBRUS_API_POINT_GC = 1022 -const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GC = 1023 -const val ENDPOINT_LIBRUS_API_TEXT_GC = 1024 -const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GC = 1025 -const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GC = 1026 -const val ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS = 1030 -const val ENDPOINT_LIBRUS_API_NORMAL_GRADES = 1031 -const val ENDPOINT_LIBRUS_API_POINT_GRADES = 1032 -const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES = 1033 -const val ENDPOINT_LIBRUS_API_TEXT_GRADES = 1034 -const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADES = 1035 -const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES = 1036 -const val ENDPOINT_LIBRUS_API_EVENT_TYPES = 1040 -const val ENDPOINT_LIBRUS_API_EVENTS = 1041 -const val ENDPOINT_LIBRUS_API_HOMEWORK = 1050 -const val ENDPOINT_LIBRUS_API_LUCKY_NUMBER = 1060 -const val ENDPOINT_LIBRUS_API_NOTICE_TYPES = 1070 -const val ENDPOINT_LIBRUS_API_NOTICES = 1071 -const val ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES = 1080 -const val ENDPOINT_LIBRUS_API_ATTENDANCES = 1081 -const val ENDPOINT_LIBRUS_API_ANNOUNCEMENTS = 1090 -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_DAYS = 1110 -const val ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS = 1120 -const val ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS = 1130 -const val ENDPOINT_LIBRUS_SYNERGIA_INFO = 2010 -const val ENDPOINT_LIBRUS_SYNERGIA_GRADES = 2020 -const val ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK = 2030 -const val ENDPOINT_LIBRUS_MESSAGES_RECEIVED = 3010 -const val ENDPOINT_LIBRUS_MESSAGES_SENT = 3020 -const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030 -const val ENDPOINT_LIBRUS_MESSAGES_RECEIVERS = 3040 -const val ENDPOINT_LIBRUS_MESSAGES_GET = 3040 +const val ENDPOINT_LIBRUS_API_ME = 1001 +const val ENDPOINT_LIBRUS_API_SCHOOLS = 1002 +const val ENDPOINT_LIBRUS_API_CLASSES = 1003 +const val ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES = 1004 +const val ENDPOINT_LIBRUS_API_UNITS = 1005 +const val ENDPOINT_LIBRUS_API_USERS = 1006 +const val ENDPOINT_LIBRUS_API_SUBJECTS = 1007 +const val ENDPOINT_LIBRUS_API_CLASSROOMS = 1008 +const val ENDPOINT_LIBRUS_API_PUSH_CONFIG = 1010 +const val ENDPOINT_LIBRUS_API_TIMETABLES = 1015 +const val ENDPOINT_LIBRUS_API_SUBSTITUTIONS = 1016 +const val ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES = 1021 +const val ENDPOINT_LIBRUS_API_POINT_GRADE_CATEGORIES = 1022 +const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADE_CATEGORIES = 1023 +const val ENDPOINT_LIBRUS_API_TEXT_GRADE_CATEGORIES = 1024 +const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADE_CATEGORIES = 1025 +const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES = 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_GRADES = 1031 +const val ENDPOINT_LIBRUS_API_POINT_GRADES = 1032 +const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES = 1033 +const val ENDPOINT_LIBRUS_API_TEXT_GRADES = 1034 +const val ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADES = 1035 +const val ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES = 1036 +const val ENDPOINT_LIBRUS_API_EVENT_TYPES = 1040 +const val ENDPOINT_LIBRUS_API_EVENTS = 1041 +const val ENDPOINT_LIBRUS_API_HOMEWORK = 1050 +const val ENDPOINT_LIBRUS_API_LUCKY_NUMBER = 1060 +const val ENDPOINT_LIBRUS_API_NOTICE_TYPES = 1070 +const val ENDPOINT_LIBRUS_API_NOTICES = 1071 +const val ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES = 1080 +const val ENDPOINT_LIBRUS_API_ATTENDANCES = 1081 +const val ENDPOINT_LIBRUS_API_ANNOUNCEMENTS = 1090 +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_DAYS = 1110 +const val ENDPOINT_LIBRUS_API_SCHOOL_FREE_DAYS = 1120 +const val ENDPOINT_LIBRUS_API_CLASS_FREE_DAYS = 1130 +const val ENDPOINT_LIBRUS_SYNERGIA_INFO = 2010 +const val ENDPOINT_LIBRUS_SYNERGIA_GRADES = 2020 +const val ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK = 2030 +const val ENDPOINT_LIBRUS_MESSAGES_RECEIVED = 3010 +const val ENDPOINT_LIBRUS_MESSAGES_SENT = 3020 +const val ENDPOINT_LIBRUS_MESSAGES_TRASH = 3030 +const val ENDPOINT_LIBRUS_MESSAGES_RECEIVERS = 3040 +const val ENDPOINT_LIBRUS_MESSAGES_GET = 3040 val LibrusFeatures = listOf( @@ -60,7 +61,7 @@ val LibrusFeatures = listOf( Feature(LOGIN_TYPE_LIBRUS, FEATURE_PUSH_CONFIG, listOf( ENDPOINT_LIBRUS_API_PUSH_CONFIG to LOGIN_METHOD_LIBRUS_API ), listOf(LOGIN_METHOD_LIBRUS_API)).withShouldSync { data -> - data.app.appConfig.fcmTokens[LOGIN_TYPE_LIBRUS]?.second?.contains(data.profileId) == false + !data.app.config.sync.tokenLibrusList.contains(data.profileId) }, @@ -92,13 +93,14 @@ val LibrusFeatures = listOf( * All grades + categories. */ Feature(LOGIN_TYPE_LIBRUS, FEATURE_GRADES, listOf( - ENDPOINT_LIBRUS_API_NORMAL_GC to LOGIN_METHOD_LIBRUS_API, - ENDPOINT_LIBRUS_API_POINT_GC to LOGIN_METHOD_LIBRUS_API, - ENDPOINT_LIBRUS_API_DESCRIPTIVE_GC to LOGIN_METHOD_LIBRUS_API, - ENDPOINT_LIBRUS_API_TEXT_GC to LOGIN_METHOD_LIBRUS_API, - ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GC to LOGIN_METHOD_LIBRUS_API, - ENDPOINT_LIBRUS_API_BEHAVIOUR_GC to LOGIN_METHOD_LIBRUS_API, + ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API, + ENDPOINT_LIBRUS_API_POINT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API, + ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API, + ENDPOINT_LIBRUS_API_TEXT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API, + ENDPOINT_LIBRUS_API_DESCRIPTIVE_TEXT_GRADE_CATEGORIES to LOGIN_METHOD_LIBRUS_API, + ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES 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_POINT_GRADES to LOGIN_METHOD_LIBRUS_API, ENDPOINT_LIBRUS_API_DESCRIPTIVE_GRADES to LOGIN_METHOD_LIBRUS_API, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusApi.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusApi.kt index 837695d3..317a79aa 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusApi.kt @@ -2,15 +2,15 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-21. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data import com.google.gson.JsonObject import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.JsonCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.utils.Utils.d import java.net.HttpURLConnection.* @@ -116,4 +116,4 @@ open class LibrusApi(open val data: DataLibrus) { .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusData.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt index c919cd52..bccb86b3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusData.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.librus.* -import pl.szczodrzynski.edziennik.api.v2.librus.data.api.* -import pl.szczodrzynski.edziennik.api.v2.librus.data.messages.LibrusMessagesGetList -import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaHomework -import pl.szczodrzynski.edziennik.api.v2.librus.data.synergia.LibrusSynergiaInfo +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages.LibrusMessagesGetList +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaHomework +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia.LibrusSynergiaInfo import pl.szczodrzynski.edziennik.data.db.modules.messages.Message import pl.szczodrzynski.edziennik.utils.Utils @@ -81,17 +81,29 @@ class LibrusData(val data: DataLibrus, val onSuccess: () -> Unit) { LibrusApiTimetables(data, onSuccess) } - ENDPOINT_LIBRUS_API_NORMAL_GRADES -> { - data.startProgress(R.string.edziennik_progress_endpoint_grades) - LibrusApiGrades(data, onSuccess) + ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES -> { + data.startProgress(R.string.edziennik_progress_endpoint_grade_categories) + LibrusApiGradeCategories(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 -> { data.startProgress(R.string.edziennik_progress_endpoint_grade_comments) LibrusApiGradeComments(data, onSuccess) } - ENDPOINT_LIBRUS_API_NORMAL_GC -> { - data.startProgress(R.string.edziennik_progress_endpoint_grade_categories) - LibrusApiGradeCategories(data, onSuccess) + ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS -> { + data.startProgress(R.string.edziennik_progress_endpoint_grade_comments) + LibrusApiBehaviourGradeComments(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 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusMessages.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusMessages.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusMessages.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusMessages.kt index 60bb1b67..2915d4d7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusMessages.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusMessages.kt @@ -2,7 +2,7 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-24 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data import com.google.gson.JsonObject import im.wangchao.mhttp.Request @@ -15,9 +15,9 @@ import okhttp3.Cookie import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.parser.Parser -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.utils.Utils.d import java.io.File import java.io.StringWriter @@ -196,7 +196,7 @@ open class LibrusMessages(open val data: DataLibrus) { try { onSuccess(file) } catch (e: Exception) { - data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_REQUEST) + data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_FILE_REQUEST) .withResponse(response) .withThrowable(e)) } @@ -206,7 +206,7 @@ open class LibrusMessages(open val data: DataLibrus) { try { onProgress(bytesWritten, bytesTotal) } catch (e: Exception) { - data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_REQUEST) + data.error(ApiError(tag, EXCEPTION_LIBRUS_MESSAGES_FILE_REQUEST) .withThrowable(e)) } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusPortal.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusPortal.kt similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusPortal.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusPortal.kt index 97fdf33d..48017438 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusPortal.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusPortal.kt @@ -1,12 +1,12 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.data +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data import com.google.gson.JsonObject import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.JsonCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.utils.Utils.d import java.net.HttpURLConnection @@ -101,4 +101,4 @@ open class LibrusPortal(open val data: DataLibrus) { .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusSynergia.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusSynergia.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusSynergia.kt index 11bb0c58..d748cb13 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/LibrusSynergia.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/LibrusSynergia.kt @@ -2,14 +2,14 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-21. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.TextCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.utils.Utils.d open class LibrusSynergia(open val data: DataLibrus) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAnnouncements.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt similarity index 75% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAnnouncements.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt index e05f1ef0..2dd3a5ec 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAnnouncements.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAnnouncements.kt @@ -2,16 +2,15 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-13 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ANNOUNCEMENTS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ANNOUNCEMENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi 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.metadata.Metadata -import pl.szczodrzynski.edziennik.utils.Utils import pl.szczodrzynski.edziennik.utils.models.Date class LibrusApiAnnouncements(override val data: DataLibrus, @@ -20,19 +19,19 @@ class LibrusApiAnnouncements(override val data: DataLibrus, const val TAG = "LibrusApiAnnouncements" } - init { + init { data.profile?.also { profile -> apiGet(TAG, "SchoolNotices") { json -> val announcements = json.getJsonArray("SchoolNotices").asJsonObjectList() announcements?.forEach { announcement -> - val id = Utils.crc16(announcement.getString("Id")?.toByteArray() - ?: return@forEach).toLong() + val id = announcement.getString("Id")?.crc32() ?: return@forEach val subject = announcement.getString("Subject") ?: "" val text = announcement.getString("Content") ?: "" val startDate = Date.fromY_m_d(announcement.getString("StartDate")) val endDate = Date.fromY_m_d(announcement.getString("EndDate")) val teacherId = announcement.getJsonObject("AddedBy")?.getLong("Id") ?: -1 - val addedDate = Date.fromIso(announcement.getString("CreationDate")) + val addedDate = announcement.getString("CreationDate")?.let { Date.fromIso(it) } + ?: System.currentTimeMillis() val read = announcement.getBoolean("WasRead") ?: false val announcementObject = Announcement( @@ -51,7 +50,7 @@ class LibrusApiAnnouncements(override val data: DataLibrus, Metadata.TYPE_ANNOUNCEMENT, id, read, - read, + profile.empty || read, addedDate )) } @@ -59,5 +58,5 @@ class LibrusApiAnnouncements(override val data: DataLibrus, data.setSyncNext(ENDPOINT_LIBRUS_API_ANNOUNCEMENTS, SYNC_ALWAYS) onSuccess() } - } + }} } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAttendanceTypes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendanceTypes.kt similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAttendanceTypes.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendanceTypes.kt index 1ee34f9f..2d85e1fa 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAttendanceTypes.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendanceTypes.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-13 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import android.graphics.Color import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ATTENDANCE_TYPES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.attendance.Attendance import pl.szczodrzynski.edziennik.data.db.modules.attendance.AttendanceType diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAttendances.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAttendances.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt index 52a3ea26..bbc0d26e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiAttendances.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiAttendances.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-13 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import androidx.core.util.isEmpty import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ATTENDANCES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ATTENDANCES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi 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.metadata.Metadata @@ -36,14 +36,14 @@ class LibrusApiAttendances(override val data: DataLibrus, val lessonNo = attendance.getInt("LessonNo") ?: return@forEach val startTime = data.lessonRanges.get(lessonNo).startTime 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 type = attendance.getJsonObject("Type")?.getLong("Id") ?: return@forEach val typeObject = data.attendanceTypes.get(type) val topic = typeObject?.name ?: "" + val lessonList = data.db.timetableDao().getForDateNow(profileId, lessonDate) + val subjectId = lessonList.firstOrNull { it.startTime == startTime }?.subjectId ?: -1 + val attendanceObject = Attendance( profileId, id, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGradeCategories.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGradeCategories.kt new file mode 100644 index 00000000..c12499ef --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGradeCategories.kt @@ -0,0 +1,46 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-3 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api + +import android.graphics.Color +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory + +class LibrusApiBehaviourGradeCategories(override val data: DataLibrus, + val onSuccess: () -> Unit) : LibrusApi(data) { + companion object { + const val TAG = "LibrusApiBehaviourGradeCategories" + } + + init { + apiGet(TAG, "BehaviourGrades/Points/Categories") { json -> + json.getJsonArray("Categories")?.asJsonObjectList()?.forEach { category -> + val id = category.getLong("Id") ?: return@forEach + val name = category.getString("Name") ?: "" + val valueFrom = category.getFloat("ValueFrom") ?: 0f + val valueTo = category.getFloat("ValueTo") ?: 0f + + val gradeCategoryObject = GradeCategory( + profileId, + id, + -1f, + Color.BLUE, + name + ).apply { + type = GradeCategory.TYPE_BEHAVIOUR + setValueRange(valueFrom, valueTo) + } + + data.gradeCategories.put(id, gradeCategoryObject) + } + + data.setSyncNext(ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_CATEGORIES, 1 * WEEK) + onSuccess() + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGradeComments.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGradeComments.kt new file mode 100644 index 00000000..43a4d5f9 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGradeComments.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-7 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api + +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS +import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory + +class LibrusApiBehaviourGradeComments(override val data: DataLibrus, + val onSuccess: () -> Unit) : LibrusApi(data) { + companion object { + const val TAG = "LibrusApiBehaviourGradeComments" + } + + init { + apiGet(TAG, "BehaviourGrades/Points/Comments") { json -> + + json.getJsonArray("Comments")?.asJsonObjectList()?.forEach { comment -> + val id = comment.getLong("Id") ?: return@forEach + val text = comment.getString("Text")?.fixWhiteSpaces() ?: return@forEach + + val gradeCategoryObject = GradeCategory( + profileId, + id, + -1f, + -1, + text + ).apply { + type = GradeCategory.TYPE_BEHAVIOUR_COMMENT + } + + data.gradeCategories.put(id, gradeCategoryObject) + } + + data.setSyncNext(ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADE_COMMENTS, SYNC_ALWAYS) + onSuccess() + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt new file mode 100644 index 00000000..33f6ab5d --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiBehaviourGrades.kt @@ -0,0 +1,150 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-3 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api + +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi +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.GradeCategory +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata +import pl.szczodrzynski.edziennik.utils.models.Date +import java.text.DecimalFormat + +class LibrusApiBehaviourGrades(override val data: DataLibrus, + val onSuccess: () -> Unit) : LibrusApi(data) { + companion object { + const val TAG = "LibrusApiBehaviourGrades" + } + + private val nameFormat by lazy { DecimalFormat("#.##") } + + init { data.profile?.let { profile -> + apiGet(TAG, "BehaviourGrades/Points") { json -> + + val semester1StartGradeObject = Grade( + profileId, + -101, + data.app.getString(R.string.grade_start_points), + 0xffbdbdbd.toInt(), + data.app.getString(R.string.grade_start_points_format, 1), + nameFormat.format(data.startPointsSemester1), + data.startPointsSemester1.toFloat(), + -1f, + 1, + -1, + 1 + ).apply { type = Grade.TYPE_BEHAVIOUR } + + data.gradeList.add(semester1StartGradeObject) + data.metadataList.add(Metadata( + profileId, + Metadata.TYPE_GRADE, + semester1StartGradeObject.id, + true, + true, + profile.getSemesterStart(1).inMillis + )) + + val semester2StartGradeObject = Grade( + profileId, + -102, + data.app.getString(R.string.grade_start_points), + 0xffbdbdbd.toInt(), + data.app.getString(R.string.grade_start_points_format, 2), + nameFormat.format(data.startPointsSemester2), + data.startPointsSemester2.toFloat(), + -1f, + 2, + -1, + 1 + ).apply { type = Grade.TYPE_BEHAVIOUR } + + data.gradeList.add(semester2StartGradeObject) + data.metadataList.add(Metadata( + profileId, + Metadata.TYPE_GRADE, + semester2StartGradeObject.id, + true, + true, + profile.getSemesterStart(2).inMillis + )) + + json.getJsonArray("Grades")?.asJsonObjectList()?.forEach { grade -> + val id = grade.getLong("Id") ?: return@forEach + val value = grade.getFloat("Value") + val shortName = grade.getString("ShortName") + val semester = grade.getInt("Semester") ?: profile.currentSemester + val teacherId = grade.getJsonObject("AddedBy")?.getLong("Id") ?: -1 + val addedDate = grade.getString("AddDate")?.let { Date.fromIso(it) } + ?: System.currentTimeMillis() + + val name = when { + value != null -> (if (value >= 0) "+" else "") + nameFormat.format(value) + shortName != null -> shortName + else -> return@forEach + } + + val color = data.getColor(when { + value == null || value == 0f -> 12 + value > 0 -> 16 + value < 0 -> 26 + else -> 12 + }) + + val categoryId = grade.getJsonObject("Category")?.getLong("Id") ?: -1 + val category = data.gradeCategories.singleOrNull { + it.categoryId == categoryId && it.type == GradeCategory.TYPE_BEHAVIOUR + } + + val categoryName = category?.text ?: "" + + val description = grade.getJsonArray("Comments")?.asJsonObjectList()?.let { comments -> + if (comments.isNotEmpty()) { + data.gradeCategories.singleOrNull { + it.type == GradeCategory.TYPE_BEHAVIOUR_COMMENT + && it.categoryId == comments[0].asJsonObject.getLong("Id") + }?.text + } else null + } ?: "" + + val valueFrom = value ?: category?.valueFrom ?: 0f + val valueTo = category?.valueTo ?: 0f + + val gradeObject = Grade( + profileId, + id, + categoryName, + color, + description, + name, + valueFrom, + -1f, + semester, + teacherId, + 1 + ).apply { + type = Grade.TYPE_BEHAVIOUR + valueMax = valueTo + } + + data.gradeList.add(gradeObject) + data.metadataList.add(Metadata( + profileId, + Metadata.TYPE_GRADE, + id, + profile.empty, + profile.empty, + addedDate + )) + } + + data.setSyncNext(ENDPOINT_LIBRUS_API_BEHAVIOUR_GRADES, SYNC_ALWAYS) + onSuccess() + } + }} +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiClasses.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiClasses.kt similarity index 86% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiClasses.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiClasses.kt index d41206b4..6f497021 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiClasses.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiClasses.kt @@ -2,12 +2,12 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-14 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.DAY -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_CLASSES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_CLASSES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.teams.Team import pl.szczodrzynski.edziennik.getJsonObject import pl.szczodrzynski.edziennik.getLong diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiClassrooms.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiClassrooms.kt similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiClassrooms.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiClassrooms.kt index 662225e0..422321ca 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiClassrooms.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiClassrooms.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-24. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_CLASSROOMS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_CLASSROOMS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.classrooms.Classroom import java.util.* diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiEventTypes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEventTypes.kt similarity index 76% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiEventTypes.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEventTypes.kt index 42fad5d2..48c479c1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiEventTypes.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEventTypes.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-24. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_EVENT_TYPES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_EVENT_TYPES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.events.EventType class LibrusApiEventTypes(override val data: DataLibrus, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiEvents.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiEvents.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt index 1f6e0e15..7b87c462 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiEvents.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiEvents.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-4. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import androidx.core.util.isEmpty import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_EVENTS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_EVENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.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.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGradeCategories.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeCategories.kt similarity index 74% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGradeCategories.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeCategories.kt index b91eae8a..1e4b7151 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGradeCategories.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeCategories.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-5 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import android.graphics.Color import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NORMAL_GC -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory @@ -22,7 +22,7 @@ class LibrusApiGradeCategories(override val data: DataLibrus, apiGet(TAG, "Grades/Categories") { json -> json.getJsonArray("Categories")?.asJsonObjectList()?.forEach { category -> val id = category.getLong("Id") ?: return@forEach - val name = category.getString("Name") ?: "" + val name = category.getString("Name")?.fixWhiteSpaces() ?: "" val weight = when (category.getBoolean("CountToTheAverage")) { true -> category.getFloat("Weight") ?: 0f else -> 0f @@ -41,7 +41,7 @@ class LibrusApiGradeCategories(override val data: DataLibrus, data.gradeCategories.put(id, gradeCategoryObject) } - data.setSyncNext(ENDPOINT_LIBRUS_API_NORMAL_GC, SYNC_ALWAYS) + data.setSyncNext(ENDPOINT_LIBRUS_API_NORMAL_GRADE_CATEGORIES, SYNC_ALWAYS) onSuccess() } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGradeComments.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt similarity index 65% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGradeComments.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt index 26a1b76b..05031612 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGradeComments.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGradeComments.kt @@ -2,17 +2,14 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-20 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.asJsonObjectList +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADE_COMMENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS 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, val onSuccess: () -> Unit) : LibrusApi(data) { @@ -25,7 +22,7 @@ class LibrusApiGradeComments(override val data: DataLibrus, json.getJsonArray("Comments")?.asJsonObjectList()?.forEach { comment -> val id = comment.getLong("Id") ?: return@forEach - val text = comment.getString("Text") + val text = comment.getString("Text")?.fixWhiteSpaces() ?: return@forEach val gradeCategoryObject = GradeCategory( profileId, @@ -34,7 +31,7 @@ class LibrusApiGradeComments(override val data: DataLibrus, -1, text ).apply { - type = GradeCategory.TYPE_COMMENT + type = GradeCategory.TYPE_NORMAL_COMMENT } data.gradeCategories.put(id, gradeCategoryObject) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGrades.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt index 07c76f00..9cd0b267 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiGrades.kt @@ -1,9 +1,9 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NORMAL_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi 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.GradeCategory @@ -46,7 +46,7 @@ class LibrusApiGrades(override val data: DataLibrus, val description = grade.getJsonArray("Comments")?.asJsonObjectList()?.let { comments -> if (comments.isNotEmpty()) { data.gradeCategories.singleOrNull { - it.type == GradeCategory.TYPE_COMMENT + it.type == GradeCategory.TYPE_NORMAL_COMMENT && it.categoryId == comments[0].asJsonObject.getLong("Id") }?.text } else null diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiHomework.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt index 2dcec68b..16bbac1c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiHomework.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiHomework.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-12. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_HOMEWORK +import pl.szczodrzynski.edziennik.data.api.edziennik.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.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiLuckyNumber.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiLuckyNumber.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt index 93579a02..a272a5dd 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiLuckyNumber.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiLuckyNumber.kt @@ -2,12 +2,12 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-14 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.DAY -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_LUCKY_NUMBER -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_LUCKY_NUMBER +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.getInt diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiMe.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiMe.kt similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiMe.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiMe.kt index 8a5df3d0..c226cf58 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiMe.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiMe.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-3. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_ME -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_ME +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi class LibrusApiMe(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusApi(data) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiNoticeTypes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNoticeTypes.kt similarity index 74% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiNoticeTypes.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNoticeTypes.kt index f49b15c7..14f251b6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiNoticeTypes.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNoticeTypes.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-24. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NOTICE_TYPES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NOTICE_TYPES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.notices.NoticeType class LibrusApiNoticeTypes(override val data: DataLibrus, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiNotices.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiNotices.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt index 2f4ca5c9..7d2036ca 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiNotices.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiNotices.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-24. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import androidx.core.util.isEmpty import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_NOTICES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_NOTICES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi 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.notices.Notice diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiPtMeetings.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiPtMeetings.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt index 2c4e5f53..a2a3789a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiPtMeetings.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiPtMeetings.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-24. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_PT_MEETINGS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_PT_MEETINGS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.utils.models.Date diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiSchools.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiSchools.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt index 5b1b1086..aff6f569 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiSchools.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSchools.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-4. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_SCHOOLS -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_SCHOOLS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.lessons.LessonRange import pl.szczodrzynski.edziennik.utils.models.Time import java.util.* diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiSubjects.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiSubjects.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt index 2cfd9be2..4c383933 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiSubjects.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiSubjects.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-23. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_SUBJECTS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_SUBJECTS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject class LibrusApiSubjects(override val data: DataLibrus, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTeacherFreeDayTypes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDayTypes.kt similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTeacherFreeDayTypes.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDayTypes.kt index eb82bbe2..88c8ce14 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTeacherFreeDayTypes.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDayTypes.kt @@ -2,12 +2,12 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-19 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAY_TYPES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsenceType class LibrusApiTeacherFreeDayTypes(override val data: DataLibrus, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTeacherFreeDays.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTeacherFreeDays.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt index 649e3377..1069ffa3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTeacherFreeDays.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTeacherFreeDays.kt @@ -2,14 +2,14 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-4. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import androidx.core.util.isEmpty import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TEACHER_FREE_DAYS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.data.db.modules.teachers.TeacherAbsence import pl.szczodrzynski.edziennik.utils.models.Date diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTemplate.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTemplate.kt similarity index 62% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTemplate.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTemplate.kt index efa7baf6..3b111f0c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTemplate.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTemplate.kt @@ -2,11 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-4. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi class LibrusApiTemplate(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusApi(data) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTimetables.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTimetables.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt index 44ba9288..ce2af163 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiTimetables.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiTimetables.kt @@ -2,15 +2,15 @@ * Copyright (c) Kuba Szczodrzyński 2019-11-10. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import androidx.core.util.isEmpty import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_TIMETABLES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_TIMETABLES +import pl.szczodrzynski.edziennik.data.api.edziennik.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.metadata.Metadata import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiUnits.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiUnits.kt similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiUnits.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiUnits.kt index 42353ad5..be4b0087 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiUnits.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiUnits.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-23. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_UNITS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_UNITS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi class LibrusApiUnits(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusApi(data) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiUsers.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiUsers.kt similarity index 75% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiUsers.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiUsers.kt index 9b1b3c93..71c18864 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiUsers.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiUsers.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-23. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_USERS -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_USERS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher class LibrusApiUsers(override val data: DataLibrus, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiVirtualClasses.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiVirtualClasses.kt similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiVirtualClasses.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiVirtualClasses.kt index 3cc1559e..e8249978 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/api/LibrusApiVirtualClasses.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/api/LibrusApiVirtualClasses.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-23. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_API_VIRTUAL_CLASSES +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi import pl.szczodrzynski.edziennik.data.db.modules.teams.Team class LibrusApiVirtualClasses(override val data: DataLibrus, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetAttachment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetAttachment.kt similarity index 74% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetAttachment.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetAttachment.kt index c1a54773..ed447ea8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetAttachment.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetAttachment.kt @@ -2,28 +2,29 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-24 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.messages +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages import kotlinx.coroutines.* import org.greenrobot.eventbus.EventBus -import pl.szczodrzynski.edziennik.api.v2.ERROR_FILE_DOWNLOAD -import pl.szczodrzynski.edziennik.api.v2.EXCEPTION_LIBRUS_MESSAGES_REQUEST -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.events.AttachmentGetEvent -import pl.szczodrzynski.edziennik.api.v2.events.AttachmentGetEvent.Companion.TYPE_FINISHED -import pl.szczodrzynski.edziennik.api.v2.events.AttachmentGetEvent.Companion.TYPE_PROGRESS -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusMessages -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_FILE_DOWNLOAD +import pl.szczodrzynski.edziennik.data.api.EXCEPTION_LIBRUS_MESSAGES_REQUEST +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages +import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent +import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent.Companion.TYPE_FINISHED +import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent.Companion.TYPE_PROGRESS +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message import pl.szczodrzynski.edziennik.get import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.utils.Utils import java.io.File import kotlin.coroutines.CoroutineContext - -class LibrusMessagesGetAttachment(override val data: DataLibrus, val messageId: Long, val attachmentId: Long, - val attachmentName: String, val onSuccess: () -> Unit) : LibrusMessages(data), CoroutineScope { +class LibrusMessagesGetAttachment( + override val data: DataLibrus, val message: Message, val attachmentId: Long, + val attachmentName: String, val onSuccess: () -> Unit) : LibrusMessages(data), CoroutineScope { companion object { const val TAG = "LibrusMessagesGetAttachment" } @@ -38,7 +39,7 @@ class LibrusMessagesGetAttachment(override val data: DataLibrus, val messageId: init { messagesGet(TAG, "GetFileDownloadLink", parameters = mapOf( "fileId" to attachmentId, - "msgId" to messageId, + "msgId" to message.id, "archive" to 0 )) { doc -> val downloadLink = doc.select("response GetFileDownloadLink downloadLink").text() @@ -55,8 +56,6 @@ class LibrusMessagesGetAttachment(override val data: DataLibrus, val messageId: data.error(ApiError(TAG, ERROR_FILE_DOWNLOAD) .withApiResponse(doc.toString())) } - - onSuccess() } } @@ -92,12 +91,11 @@ class LibrusMessagesGetAttachment(override val data: DataLibrus, val messageId: private fun downloadAttachment(attachmentKey: String) { val targetFile = File(Utils.getStorageDir(), attachmentName) - sandboxGetFile(TAG, "CSDownload&singleUseKey=$attachmentKey", - targetFile, { file -> + sandboxGetFile(TAG, "CSDownload&singleUseKey=$attachmentKey", targetFile, { file -> val event = AttachmentGetEvent( profileId, - messageId, + message.id, attachmentId, TYPE_FINISHED, file.absolutePath @@ -108,10 +106,12 @@ class LibrusMessagesGetAttachment(override val data: DataLibrus, val messageId: EventBus.getDefault().post(event) + onSuccess() + }) { written, _ -> val event = AttachmentGetEvent( profileId, - messageId, + message.id, attachmentId, TYPE_PROGRESS, bytesWritten = written diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetList.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetList.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt index 3aee398d..373fab34 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetList.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetList.kt @@ -2,15 +2,15 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-24 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.messages +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages import pl.szczodrzynski.edziennik.DAY import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES -import pl.szczodrzynski.edziennik.api.v2.ERROR_NOT_IMPLEMENTED -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_MESSAGES_RECEIVED -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_MESSAGES_SENT -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusMessages +import pl.szczodrzynski.edziennik.data.api.ERROR_NOT_IMPLEMENTED +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_MESSAGES_RECEIVED +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_MESSAGES_SENT +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages 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.TYPE_RECEIVED diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetMessage.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt index 83474d02..27c21be8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesGetMessage.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-11 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.messages +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages import android.util.Base64 import org.greenrobot.eventbus.EventBus -import pl.szczodrzynski.edziennik.api.v2.events.MessageGetEvent -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusMessages +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages +import pl.szczodrzynski.edziennik.data.api.events.MessageGetEvent import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_RECEIVED import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull @@ -38,7 +38,7 @@ class LibrusMessagesGetMessage( val body = Base64.decode(message.select("Message").text(), Base64.DEFAULT) .toString(Charset.defaultCharset()) .replace("\n", "
") - .replace("", "") messageObject.apply { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesTemplate.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesTemplate.kt similarity index 61% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesTemplate.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesTemplate.kt index f2a84d68..797bb2ca 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/messages/LibrusMessagesTemplate.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesTemplate.kt @@ -2,11 +2,10 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-25 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.messages +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.messages -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusMessages -import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusMessages class LibrusMessagesTemplate(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusMessages(data) { companion object { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaHomework.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt index 5e423215..a34ee1e9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaHomework.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaHomework.kt @@ -2,16 +2,16 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-22. */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.synergia +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia import org.jsoup.Jsoup import pl.szczodrzynski.edziennik.HOUR import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.POST -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusSynergia -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.POST +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_SYNERGIA_HOMEWORK +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia +import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.get diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaInfo.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaInfo.kt similarity index 71% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaInfo.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaInfo.kt index 7777cf6a..3ccb230f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaInfo.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaInfo.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-23 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.synergia +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia import org.jsoup.Jsoup import pl.szczodrzynski.edziennik.MONTH -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.ENDPOINT_LIBRUS_SYNERGIA_INFO -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusSynergia +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.ENDPOINT_LIBRUS_SYNERGIA_INFO +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia class LibrusSynergiaInfo(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusSynergia(data) { companion object { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt similarity index 62% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt index 5976954a..4a0ca241 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaMarkAllAnnouncementsAsRead.kt @@ -2,10 +2,10 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-26 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.synergia +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusSynergia +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia class LibrusSynergiaMarkAllAnnouncementsAsRead(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusSynergia(data) { companion object { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaTemplate.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaTemplate.kt similarity index 61% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaTemplate.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaTemplate.kt index 1cc0097e..af519128 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/data/synergia/LibrusSynergiaTemplate.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaTemplate.kt @@ -2,12 +2,10 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-23 */ -package pl.szczodrzynski.edziennik.api.v2.librus.data.synergia +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.synergia -import org.jsoup.Jsoup -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusSynergia -import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusSynergia class LibrusSynergiaTemplate(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusSynergia(data) { companion object { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/LibrusFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt similarity index 55% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/LibrusFirstLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt index 41d77921..1301222b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/firstlogin/LibrusFirstLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/firstlogin/LibrusFirstLogin.kt @@ -1,20 +1,20 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.firstlogin +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.firstlogin import org.greenrobot.eventbus.EventBus import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.ERROR_NO_STUDENTS_IN_ACCOUNT -import pl.szczodrzynski.edziennik.api.v2.FAKE_LIBRUS_ACCOUNTS -import pl.szczodrzynski.edziennik.api.v2.LIBRUS_ACCOUNTS_URL -import pl.szczodrzynski.edziennik.api.v2.LOGIN_MODE_LIBRUS_EMAIL -import pl.szczodrzynski.edziennik.api.v2.events.FirstLoginFinishedEvent -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusPortal -import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginApi -import pl.szczodrzynski.edziennik.api.v2.librus.login.LibrusLoginPortal -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.data.api.AppError.CODE_LIBRUS_DISCONNECTED -import pl.szczodrzynski.edziennik.data.api.AppError.CODE_SYNERGIA_NOT_ACTIVATED +import pl.szczodrzynski.edziennik.data.api.ERROR_NO_STUDENTS_IN_ACCOUNT +import pl.szczodrzynski.edziennik.data.api.FAKE_LIBRUS_ACCOUNTS +import pl.szczodrzynski.edziennik.data.api.LIBRUS_ACCOUNTS_URL +import pl.szczodrzynski.edziennik.data.api.LOGIN_MODE_LIBRUS_EMAIL +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusPortal +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginApi +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.login.LibrusLoginPortal +import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.models.AppError.CODE_LIBRUS_DISCONNECTED +import pl.szczodrzynski.edziennik.data.api.models.AppError.CODE_SYNERGIA_NOT_ACTIVATED import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile class LibrusFirstLogin(val data: DataLibrus, val onSuccess: () -> Unit) { @@ -85,8 +85,38 @@ class LibrusFirstLogin(val data: DataLibrus, val onSuccess: () -> Unit) { LibrusLoginApi(data) { api.apiGet(TAG, "Me") { json -> + val profile = Profile() + + val me = json.getJsonObject("Me") + val account = me?.getJsonObject("Account") + val user = me?.getJsonObject("User") + + profile.putStudentData("isPremium", account?.getBoolean("IsPremium") == true || account?.getBoolean("IsPremiumDemo") == true) + + val isParent = account?.getInt("GroupId") == 5 + profile.accountNameLong = + if (isParent) + buildFullName(account?.getString("FirstName"), account?.getString("LastName")) + else null + + profile.studentNameLong = + buildFullName(user?.getString("FirstName"), user?.getString("LastName")) + + profile.studentNameShort = profile.studentNameLong?.getShortName() + profile.name = profile.studentNameLong + profile.subname = account.getString("Login") + profile.empty = true + profile.putStudentData("accountId", account.getInt("Id") ?: 0) + profile.putStudentData("accountLogin", profile.subname) + profile.putStudentData("accountToken", data.apiAccessToken) + profile.putStudentData("accountRefreshToken", data.apiRefreshToken) + profile.putStudentData("accountTokenTime", data.apiTokenExpiryTime) + profileList.add(profile) + + EventBus.getDefault().post(FirstLoginFinishedEvent(profileList, data.loginStore)) + onSuccess() } } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt similarity index 83% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt index cfcd6fd6..c79acd2e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLogin.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login import pl.szczodrzynski.edziennik.R -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.librus.DataLibrus +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.edziennik.librus.DataLibrus import pl.szczodrzynski.edziennik.utils.Utils class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) { @@ -66,4 +66,4 @@ class LibrusLogin(val data: DataLibrus, val onSuccess: () -> Unit) { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt index 8b4e0542..0f843a88 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginApi.kt @@ -2,16 +2,16 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-20. */ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login import com.google.gson.JsonObject import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.body.MediaTypeUtils import im.wangchao.mhttp.callback.JsonCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getInt import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.getUnixDate @@ -248,4 +248,4 @@ class LibrusLoginApi { .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginMessages.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginMessages.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt index 91eeab95..9767683b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginMessages.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginMessages.kt @@ -2,16 +2,16 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-20. */ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.body.MediaTypeUtils import im.wangchao.mhttp.callback.TextCallbackHandler import okhttp3.Cookie -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getUnixDate import pl.szczodrzynski.edziennik.utils.Utils.d import java.io.StringWriter @@ -160,4 +160,4 @@ class LibrusLoginMessages(val data: DataLibrus, val onSuccess: () -> Unit) { data.messagesSessionId = sessionId data.messagesSessionIdExpiryTime = response.getUnixDate() + 45 * 60 /* 45min */ } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginPortal.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginPortal.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt index b845ef0e..41ad6255 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginPortal.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginPortal.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login import android.util.Pair import com.google.gson.JsonObject @@ -7,9 +7,9 @@ import im.wangchao.mhttp.Response import im.wangchao.mhttp.body.MediaTypeUtils import im.wangchao.mhttp.callback.JsonCallbackHandler import im.wangchao.mhttp.callback.TextCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getInt import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.getUnixDate @@ -222,4 +222,4 @@ class LibrusLoginPortal(val data: DataLibrus, val onSuccess: () -> Unit) { .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginSynergia.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginSynergia.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt index 73f4ec9c..3e11d502 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/LibrusLoginSynergia.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/LibrusLoginSynergia.kt @@ -2,17 +2,17 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-20. */ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login import com.google.gson.JsonObject import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.TextCallbackHandler import okhttp3.Cookie -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusApi +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getString import pl.szczodrzynski.edziennik.getUnixDate import pl.szczodrzynski.edziennik.utils.Utils.d @@ -130,4 +130,4 @@ class LibrusLoginSynergia(override val data: DataLibrus, val onSuccess: () -> Un .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt index 0d80cd65..d9719606 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/librus/login/SynergiaTokenExtractor.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/login/SynergiaTokenExtractor.kt @@ -1,12 +1,12 @@ -package pl.szczodrzynski.edziennik.api.v2.librus.login +package pl.szczodrzynski.edziennik.data.api.edziennik.librus.login import com.google.gson.JsonObject import im.wangchao.mhttp.Response import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.librus.DataLibrus -import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusPortal -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus +import pl.szczodrzynski.edziennik.data.api.edziennik.librus.data.LibrusPortal +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.utils.Utils.d class SynergiaTokenExtractor(override val data: DataLibrus, val onSuccess: () -> Unit) : LibrusPortal(data) { @@ -70,4 +70,4 @@ class SynergiaTokenExtractor(override val data: DataLibrus, val onSuccess: () -> portalGet(TAG, (if (data.fakeLogin) FAKE_LIBRUS_ACCOUNT else LIBRUS_ACCOUNT_URL)+accountLogin, onSuccess = onSuccess) return true } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/DataMobidziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/DataMobidziennik.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt index d012186f..40ba688d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/DataMobidziennik.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/DataMobidziennik.kt @@ -2,15 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik import android.util.LongSparseArray -import android.util.SparseArray -import android.util.SparseIntArray import androidx.core.util.isNotEmpty import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_MOBIDZIENNIK_WEB -import pl.szczodrzynski.edziennik.api.v2.models.Data +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_MOBIDZIENNIK_WEB +import pl.szczodrzynski.edziennik.data.api.models.Data import pl.szczodrzynski.edziennik.currentTimeUnix import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile @@ -114,4 +112,4 @@ class DataMobidziennik(app: App, profile: Profile?, loginStore: LoginStore) : Da var lessonNumber: Int, var signed: String ) -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/Mobidziennik.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/Mobidziennik.kt similarity index 69% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/Mobidziennik.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/Mobidziennik.kt index 9e04dc72..4b8b822d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/Mobidziennik.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/Mobidziennik.kt @@ -2,22 +2,24 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410 -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikData -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.MobidziennikWebGetMessage -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.firstlogin.MobidziennikFirstLogin -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.login.MobidziennikLogin -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.login.MobidziennikLoginWeb -import pl.szczodrzynski.edziennik.api.v2.mobidziennikLoginMethods -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.prepare +import pl.szczodrzynski.edziennik.data.api.CODE_INTERNAL_LIBRUS_ACCOUNT_410 +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikData +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web.MobidziennikWebGetAttachment +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web.MobidziennikWebGetMessage +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.firstlogin.MobidziennikFirstLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login.MobidziennikLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login.MobidziennikLoginWeb +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface +import pl.szczodrzynski.edziennik.data.api.mobidziennikLoginMethods +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.prepare 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.profiles.Profile import pl.szczodrzynski.edziennik.utils.Utils.d @@ -25,6 +27,8 @@ import pl.szczodrzynski.edziennik.utils.Utils.d class Mobidziennik(val app: App, val profile: Profile?, val loginStore: LoginStore, val callback: EdziennikCallback) : EdziennikInterface { companion object { private const val TAG = "Mobidziennik" + + const val API_KEY = "szkolny_eu_72c7dbc8b97f1e5dd2d118cacf51c2b8543d15c0f65b7a59979adb0a1296b235d7febb826dd2a28688def6efe0811b924b04d7f3c7b7d005354e06dc56815d57" } val internalErrorList = mutableListOf() @@ -39,7 +43,7 @@ class Mobidziennik(val app: App, val profile: Profile?, val loginStore: LoginSto private fun completed() { data.saveData() - data.notifyAndSyncEvents { + data.notify { callback.onCompleted() } } @@ -76,8 +80,12 @@ class Mobidziennik(val app: App, val profile: Profile?, val loginStore: LoginSto } - override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) { - + override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) { + MobidziennikLoginWeb(data) { + MobidziennikWebGetAttachment(data, message, attachmentId, attachmentName) { + completed() + } + } } override fun firstLogin() { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/MobidziennikFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/MobidziennikFeatures.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/MobidziennikFeatures.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/MobidziennikFeatures.kt index 234b41e7..c08846c9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/MobidziennikFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/MobidziennikFeatures.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.Feature +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.models.Feature const val ENDPOINT_MOBIDZIENNIK_API_MAIN = 1000 const val ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_INBOX = 2011 @@ -104,4 +104,4 @@ val MobidziennikFeatures = listOf( ENDPOINT_MOBIDZIENNIK_WEB_ATTENDANCE to LOGIN_METHOD_MOBIDZIENNIK_WEB ), listOf(LOGIN_METHOD_MOBIDZIENNIK_WEB)).apply { priority = 4 }*/ -) \ No newline at end of file +) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/MobidziennikData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/MobidziennikData.kt similarity index 80% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/MobidziennikData.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/MobidziennikData.kt index e6f2aca5..0ceeb49a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/MobidziennikData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/MobidziennikData.kt @@ -2,15 +2,15 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.* -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api.MobidziennikApi -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.MobidziennikWebCalendar -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.MobidziennikWebGrades -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.MobidziennikWebMessagesAll -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web.MobidziennikWebMessagesInbox +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.* +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api.MobidziennikApi +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web.MobidziennikWebCalendar +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web.MobidziennikWebGrades +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web.MobidziennikWebMessagesAll +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web.MobidziennikWebMessagesInbox import pl.szczodrzynski.edziennik.utils.Utils class MobidziennikData(val data: DataMobidziennik, val onSuccess: () -> Unit) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/MobidziennikWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/MobidziennikWeb.kt similarity index 50% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/MobidziennikWeb.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/MobidziennikWeb.kt index 67828b73..6a1fc1dc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/MobidziennikWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/MobidziennikWeb.kt @@ -2,16 +2,18 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response +import im.wangchao.mhttp.callback.FileCallbackHandler import im.wangchao.mhttp.callback.TextCallbackHandler import okhttp3.Cookie -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.utils.Utils.d +import java.io.File open class MobidziennikWeb(open val data: DataMobidziennik) { companion object { @@ -24,7 +26,7 @@ open class MobidziennikWeb(open val data: DataMobidziennik) { val profile get() = data.profile - fun webGet(tag: String, endpoint: String, method: Int = GET, payload: List>? = null, onSuccess: (text: String) -> Unit) { + fun webGet(tag: String, endpoint: String, method: Int = GET, onSuccess: (text: String) -> Unit) { val url = "https://${data.loginServerName}.mobidziennik.pl$endpoint" d(tag, "Request: Mobidziennik/Web - $url") @@ -93,4 +95,77 @@ open class MobidziennikWeb(open val data: DataMobidziennik) { .build() .enqueue() } -} \ No newline at end of file + + fun webGetFile(tag: String, action: String, targetFile: File, onSuccess: (file: File) -> Unit, + onProgress: (written: Long, total: Long) -> Unit) { + val url = "https://${data.loginServerName}.mobidziennik.pl$action" + + d(tag, "Request: Mobidziennik/Web - $url") + + if (data.webSessionKey == null) { + data.error(TAG, ERROR_MOBIDZIENNIK_WEB_NO_SESSION_KEY) + return + } + if (data.webSessionValue == null) { + data.error(TAG, ERROR_MOBIDZIENNIK_WEB_NO_SESSION_VALUE) + return + } + if (data.webServerId == null) { + data.error(TAG, ERROR_MOBIDZIENNIK_WEB_NO_SERVER_ID) + return + } + + val callback = object : FileCallbackHandler(targetFile) { + override fun onSuccess(file: File?, response: Response?) { + if (file == null) { + data.error(ApiError(TAG, ERROR_FILE_DOWNLOAD) + .withResponse(response)) + return + } + + try { + onSuccess(file) + } catch (e: Exception) { + data.error(ApiError(tag, EXCEPTION_MOBIDZIENNIK_WEB_FILE_REQUEST) + .withResponse(response) + .withThrowable(e)) + } + } + + override fun onProgress(bytesWritten: Long, bytesTotal: Long) { + try { + onProgress(bytesWritten, bytesTotal) + } catch (e: Exception) { + data.error(ApiError(tag, EXCEPTION_MOBIDZIENNIK_WEB_FILE_REQUEST) + .withThrowable(e)) + } + } + + override fun onFailure(response: Response?, throwable: Throwable?) { + data.error(ApiError(TAG, ERROR_REQUEST_FAILURE) + .withResponse(response) + .withThrowable(throwable)) + } + } + + data.app.cookieJar.saveFromResponse(null, listOf( + Cookie.Builder() + .name(data.webSessionKey!!) + .value(data.webSessionValue!!) + .domain("${data.loginServerName}.mobidziennik.pl") + .secure().httpOnly().build(), + Cookie.Builder() + .name("SERVERID") + .value(data.webServerId!!) + .domain("${data.loginServerName}.mobidziennik.pl") + .secure().httpOnly().build() + )) + + Request.builder() + .url(url) + .userAgent(MOBIDZIENNIK_USER_AGENT) + .callback(callback) + .build() + .enqueue() + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApi.kt similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApi.kt index 4a4069ed..543f21dc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApi.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.ERROR_MOBIDZIENNIK_WEB_INVALID_RESPONSE -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_API_MAIN -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.ERROR_MOBIDZIENNIK_WEB_INVALID_RESPONSE +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.ENDPOINT_MOBIDZIENNIK_API_MAIN +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS class MobidziennikApi(override val data: DataMobidziennik, @@ -50,4 +50,4 @@ class MobidziennikApi(override val data: DataMobidziennik, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiAttendance.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiAttendance.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiAttendance.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiAttendance.kt index a22093e7..76369615 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiAttendance.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiAttendance.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik 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 @@ -55,4 +55,4 @@ class MobidziennikApiAttendance(val data: DataMobidziennik, rows: List) } } }} -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiDates.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiDates.kt similarity index 80% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiDates.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiDates.kt index c74f79cd..a0b3dbc2 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiDates.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiDates.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.utils.models.Date class MobidziennikApiDates(val data: DataMobidziennik, rows: List) { @@ -21,4 +21,4 @@ class MobidziennikApiDates(val data: DataMobidziennik, rows: List) { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiEvents.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiEvents.kt similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiEvents.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiEvents.kt index 2dea973f..adfdee11 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiEvents.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiEvents.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api import androidx.core.util.contains -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.utils.models.Date diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiGradeCategories.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiGradeCategories.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiGradeCategories.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiGradeCategories.kt index d13c8ecd..87b069cc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiGradeCategories.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiGradeCategories.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-7. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api import android.graphics.Color import androidx.core.util.contains -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeCategory class MobidziennikApiGradeCategories(val data: DataMobidziennik, rows: List) { @@ -38,4 +38,4 @@ class MobidziennikApiGradeCategories(val data: DataMobidziennik, rows: List) { addedDate++ } }} -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiHomework.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiHomework.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiHomework.kt index 405dc9f1..37605401 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiHomework.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiHomework.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api import androidx.core.util.contains -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.utils.models.Date diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiLessons.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiLessons.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiLessons.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiLessons.kt index ee0579c4..47ab7494 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiLessons.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiLessons.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-7. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.utils.models.Date import pl.szczodrzynski.edziennik.utils.models.Time @@ -46,4 +46,4 @@ class MobidziennikApiLessons(val data: DataMobidziennik, rows: List) { data.mobiLessons.add(lesson) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiNotices.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiNotices.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiNotices.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiNotices.kt index 5e9a4c23..5520f490 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiNotices.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiNotices.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.data.db.modules.notices.Notice import pl.szczodrzynski.edziennik.utils.models.Date @@ -52,4 +52,4 @@ class MobidziennikApiNotices(val data: DataMobidziennik, rows: List) { )) } }} -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiStudent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiStudent.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiStudent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiStudent.kt index 01f7ecc4..2435478e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiStudent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiStudent.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik class MobidziennikApiStudent(val data: DataMobidziennik, rows: List) { init { run { @@ -34,4 +34,4 @@ class MobidziennikApiStudent(val data: DataMobidziennik, rows: List) { e.printStackTrace(); }*/ }} -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiSubjects.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiSubjects.kt similarity index 79% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiSubjects.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiSubjects.kt index 541be25b..eb2cef64 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiSubjects.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiSubjects.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject class MobidziennikApiSubjects(val data: DataMobidziennik, rows: List) { @@ -22,4 +22,4 @@ class MobidziennikApiSubjects(val data: DataMobidziennik, rows: List) { data.subjectList.put(id, Subject(data.profileId, id, longName, shortName)) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiTeams.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiTeams.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiTeams.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiTeams.kt index 2d737899..309e9cdb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiTeams.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiTeams.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.data.db.modules.teams.Team import pl.szczodrzynski.edziennik.getById import pl.szczodrzynski.edziennik.values @@ -59,4 +59,4 @@ class MobidziennikApiTeams(val data: DataMobidziennik, tableTeams: List? } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiTimetable.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiTimetable.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiTimetable.kt index e6cd4e6b..1832e2fe 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiTimetable.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiTimetable.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.models.DataRemoveModel import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.data.db.modules.timetable.Lesson import pl.szczodrzynski.edziennik.fixName diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiUsers.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiUsers.kt similarity index 81% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiUsers.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiUsers.kt index 1ef8619f..da17657d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/api/MobidziennikApiUsers.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/api/MobidziennikApiUsers.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.api -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher import pl.szczodrzynski.edziennik.fixName @@ -26,4 +26,4 @@ class MobidziennikApiUsers(val data: DataMobidziennik, rows: List) { data.teacherList.put(id, Teacher(data.profileId, id, name, surname)) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikLuckyNumberExtractor.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikLuckyNumberExtractor.kt similarity index 86% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikLuckyNumberExtractor.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikLuckyNumberExtractor.kt index 6ac0cdcf..7aaf7474 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikLuckyNumberExtractor.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikLuckyNumberExtractor.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-10. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.data.db.modules.luckynumber.LuckyNumber import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata import pl.szczodrzynski.edziennik.utils.models.Date @@ -38,4 +38,4 @@ class MobidziennikLuckyNumberExtractor(val data: DataMobidziennik, text: String) } catch (_: Exception){} } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebCalendar.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebCalendar.kt similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebCalendar.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebCalendar.kt index 2fa16345..c1578af4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebCalendar.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebCalendar.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-10. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web import com.google.gson.JsonParser -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_CALENDAR -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_CALENDAR +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb 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.metadata.Metadata @@ -98,4 +98,4 @@ class MobidziennikWebCalendar(override val data: DataMobidziennik, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetAttachment.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetAttachment.kt new file mode 100644 index 00000000..326553c8 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetAttachment.kt @@ -0,0 +1,60 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-11-28. + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web + +import org.greenrobot.eventbus.EventBus +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.events.AttachmentGetEvent +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message +import pl.szczodrzynski.edziennik.utils.Utils +import java.io.File + +class MobidziennikWebGetAttachment( + override val data: DataMobidziennik, val message: Message, val attachmentId: Long, + val attachmentName: String, val onSuccess: () -> Unit) : MobidziennikWeb(data) { + companion object { + private const val TAG = "MobidziennikWebGetAttachment" + } + + init { + val targetFile = File(Utils.getStorageDir(), attachmentName) + + val typeUrl = if (message.type == Message.TYPE_SENT) + "wiadwyslana" + else + "wiadodebrana" + + webGetFile(TAG, "/dziennik/$typeUrl/?id=${message.id}&zalacznik=$attachmentId", targetFile, { file -> + + val event = AttachmentGetEvent( + profileId, + message.id, + attachmentId, + AttachmentGetEvent.TYPE_FINISHED, + file.absolutePath + ) + + val attachmentDataFile = File(Utils.getStorageDir(), ".${profileId}_${event.messageId}_${event.attachmentId}") + Utils.writeStringToFile(attachmentDataFile, event.fileName) + + EventBus.getDefault().post(event) + + onSuccess() + + }) { written, _ -> + // TODO make use of bytesTotal + val event = AttachmentGetEvent( + profileId, + message.id, + attachmentId, + AttachmentGetEvent.TYPE_PROGRESS, + bytesWritten = written + ) + + EventBus.getDefault().post(event) + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebGetMessage.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt index 3307ee7c..8390aa37 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebGetMessage.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-11-18. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web import org.greenrobot.eventbus.EventBus import org.jsoup.Jsoup -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.events.MessageGetEvent -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.events.MessageGetEvent 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.MessageFull @@ -124,7 +124,7 @@ class MobidziennikWebGetMessage( val attachmentName = it.ownText() Regexes.MOBIDZIENNIK_MESSAGE_ATTACHMENT.find(it.outerHtml())?.let { match -> val attachmentId = match[1].toLong() - var size = match[2].toFloatOrNull() ?: 0f + var size = match[2].toFloatOrNull() ?: -1f when (match[3]) { "K" -> size *= 1024f "M" -> size *= 1024f * 1024f @@ -154,4 +154,4 @@ class MobidziennikWebGetMessage( onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGrades.kt similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebGrades.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGrades.kt index cad45ab8..52db5bfa 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGrades.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-10. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web import android.graphics.Color import org.jsoup.Jsoup -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_GRADES -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb 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.metadata.Metadata @@ -96,13 +96,17 @@ class MobidziennikWebGrades(override val data: DataMobidziennik, if (Regexes.MOBIDZIENNIK_GRADES_COUNT_TO_AVG.containsMatchIn(html)) { Regexes.MOBIDZIENNIK_GRADES_DETAILS.find(html)?.let { match -> val gradeName = match[1] - val gradeDescription = match[2] + var gradeDescription = match[2] val gradeValue = match[3].toFloatOrNull() ?: 0.0f val teacherName = match[4].fixWhiteSpaces() val teacherId = data.teacherList.singleOrNull { it.fullNameLastFirst == teacherName }?.id ?: -1 val subjectId = data.subjectList.singleOrNull { it.longName == subjectName }?.id ?: -1 + if (match[5].isNotEmpty()) { + gradeDescription += "\n"+match[5].replace("
", "\n") + } + val gradeObject = Grade( profileId, gradeId, @@ -143,4 +147,4 @@ class MobidziennikWebGrades(override val data: DataMobidziennik, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebMessagesAll.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebMessagesAll.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt index 7f11765e..56c0015a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebMessagesAll.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web import org.jsoup.Jsoup import pl.szczodrzynski.edziennik.DAY -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_ALL -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_ALL +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb 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_SENT @@ -87,4 +87,4 @@ class MobidziennikWebMessagesAll(override val data: DataMobidziennik, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt index 6a23596b..8e01c560 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web import org.jsoup.Jsoup -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_INBOX -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_INBOX +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb 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.MessageRecipient @@ -83,4 +83,4 @@ class MobidziennikWebMessagesInbox(override val data: DataMobidziennik, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebNotices.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebNotices.kt similarity index 50% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebNotices.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebNotices.kt index ab7d8760..d962826c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/data/web/MobidziennikWebNotices.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebNotices.kt @@ -2,21 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.web -import com.google.gson.JsonParser -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_CALENDAR -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_NOTICES -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.ENDPOINT_MOBIDZIENNIK_WEB_NOTICES +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb 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.metadata.Metadata -import pl.szczodrzynski.edziennik.getString -import pl.szczodrzynski.edziennik.utils.Utils -import pl.szczodrzynski.edziennik.utils.models.Date -import java.util.* class MobidziennikWebNotices(override val data: DataMobidziennik, val onSuccess: () -> Unit) : MobidziennikWeb(data) { @@ -35,4 +26,4 @@ class MobidziennikWebNotices(override val data: DataMobidziennik, onSuccess() }*/ } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/firstlogin/MobidziennikFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/firstlogin/MobidziennikFirstLogin.kt similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/firstlogin/MobidziennikFirstLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/firstlogin/MobidziennikFirstLogin.kt index 3742e34b..716f4937 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/firstlogin/MobidziennikFirstLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/firstlogin/MobidziennikFirstLogin.kt @@ -1,10 +1,10 @@ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.firstlogin +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.firstlogin import org.greenrobot.eventbus.EventBus -import pl.szczodrzynski.edziennik.api.v2.events.FirstLoginFinishedEvent -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.data.MobidziennikWeb -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.login.MobidziennikLoginWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.data.MobidziennikWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login.MobidziennikLoginWeb +import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile import pl.szczodrzynski.edziennik.fixName import pl.szczodrzynski.edziennik.utils.models.Date @@ -57,4 +57,4 @@ class MobidziennikFirstLogin(val data: DataMobidziennik, val onSuccess: () -> Un } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/login/MobidziennikLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/login/MobidziennikLogin.kt similarity index 84% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/login/MobidziennikLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/login/MobidziennikLogin.kt index 95e6cd95..498ab2e3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/login/MobidziennikLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/login/MobidziennikLogin.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.login +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_MOBIDZIENNIK_API2 -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_MOBIDZIENNIK_WEB -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_MOBIDZIENNIK_API2 +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_MOBIDZIENNIK_WEB +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik import pl.szczodrzynski.edziennik.utils.Utils class MobidziennikLogin(val data: DataMobidziennik, val onSuccess: () -> Unit) { @@ -56,4 +56,4 @@ class MobidziennikLogin(val data: DataMobidziennik, val onSuccess: () -> Unit) { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/login/MobidziennikLoginWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/login/MobidziennikLoginWeb.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/login/MobidziennikLoginWeb.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/login/MobidziennikLoginWeb.kt index ccce499d..dbd3f86f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/mobidziennik/login/MobidziennikLoginWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/login/MobidziennikLoginWeb.kt @@ -2,14 +2,15 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.mobidziennik.login +package pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.login import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.TextCallbackHandler -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.mobidziennik.DataMobidziennik -import pl.szczodrzynski.edziennik.api.v2.models.ApiError +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.DataMobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.Mobidziennik +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.getUnixDate import pl.szczodrzynski.edziennik.isNotNullNorEmpty import pl.szczodrzynski.edziennik.utils.Utils.d @@ -91,10 +92,11 @@ class MobidziennikLoginWeb(val data: DataMobidziennik, val onSuccess: () -> Unit .addParameter("ip", data.app.deviceId) .addParameter("login", data.loginUsername) .addParameter("haslo", data.loginPassword) - .addParameter("token", data.app.appConfig.fcmTokens[LOGIN_TYPE_MOBIDZIENNIK]?.first) + .addParameter("token", data.app.config.sync.tokenMobidziennik) + .addParameter("ta_api", Mobidziennik.API_KEY) .post() .callback(callback) .build() .enqueue() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/DataTemplate.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/DataTemplate.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/DataTemplate.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/DataTemplate.kt index 8715d09f..86616983 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/DataTemplate.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/DataTemplate.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template +package pl.szczodrzynski.edziennik.data.api.edziennik.template import okhttp3.Cookie import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_TEMPLATE_API -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_TEMPLATE_WEB -import pl.szczodrzynski.edziennik.api.v2.models.Data +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_TEMPLATE_API +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_TEMPLATE_WEB +import pl.szczodrzynski.edziennik.data.api.models.Data import pl.szczodrzynski.edziennik.currentTimeUnix import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile @@ -73,4 +73,4 @@ class DataTemplate(app: App, profile: Profile?, loginStore: LoginStore) : Data(a var apiExpiryTime: Long get() { mApiExpiryTime = mApiExpiryTime ?: profile?.getStudentData("apiExpiryTime", 0L); return mApiExpiryTime ?: 0L } set(value) { profile?.putStudentData("apiExpiryTime", value) ?: return; mApiExpiryTime = value } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/Template.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/Template.kt similarity index 79% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/Template.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/Template.kt index 508fe8f7..e850b741 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/Template.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/Template.kt @@ -2,20 +2,21 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template +package pl.szczodrzynski.edziennik.data.api.edziennik.template import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410 -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.prepare -import pl.szczodrzynski.edziennik.api.v2.template.data.TemplateData -import pl.szczodrzynski.edziennik.api.v2.template.firstlogin.TemplateFirstLogin -import pl.szczodrzynski.edziennik.api.v2.template.login.TemplateLogin -import pl.szczodrzynski.edziennik.api.v2.templateLoginMethods +import pl.szczodrzynski.edziennik.data.api.CODE_INTERNAL_LIBRUS_ACCOUNT_410 +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.TemplateData +import pl.szczodrzynski.edziennik.data.api.edziennik.template.firstlogin.TemplateFirstLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.template.login.TemplateLogin +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.prepare +import pl.szczodrzynski.edziennik.data.api.templateLoginMethods 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.profiles.Profile import pl.szczodrzynski.edziennik.utils.Utils.d @@ -37,7 +38,7 @@ class Template(val app: App, val profile: Profile?, val loginStore: LoginStore, private fun completed() { data.saveData() - data.notifyAndSyncEvents { + data.notify { callback.onCompleted() } } @@ -70,7 +71,7 @@ class Template(val app: App, val profile: Profile?, val loginStore: LoginStore, } - override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) { + override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) { } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/TemplateFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/TemplateFeatures.kt similarity index 83% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/TemplateFeatures.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/TemplateFeatures.kt index b643f74d..c12e2bcc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/TemplateFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/TemplateFeatures.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-11. */ -package pl.szczodrzynski.edziennik.api.v2.template +package pl.szczodrzynski.edziennik.data.api.edziennik.template -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.Feature +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.models.Feature const val ENDPOINT_TEMPLATE_WEB_SAMPLE = 9991 const val ENDPOINT_TEMPLATE_WEB_SAMPLE_2 = 9992 @@ -21,4 +21,4 @@ val TemplateFeatures = listOf( Feature(LOGIN_TYPE_TEMPLATE, FEATURE_GRADES, listOf( ENDPOINT_TEMPLATE_API_SAMPLE to LOGIN_METHOD_TEMPLATE_API ), listOf(LOGIN_METHOD_TEMPLATE_API)) -) \ No newline at end of file +) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateApi.kt similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateApi.kt index 9021b2db..e36a8e6d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateApi.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.data +package pl.szczodrzynski.edziennik.data.api.edziennik.template.data import com.google.gson.JsonObject -import pl.szczodrzynski.edziennik.api.v2.ERROR_TEMPLATE_WEB_OTHER -import pl.szczodrzynski.edziennik.api.v2.GET -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.ERROR_TEMPLATE_WEB_OTHER +import pl.szczodrzynski.edziennik.data.api.GET +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.currentTimeUnix open class TemplateApi(open val data: DataTemplate) { @@ -42,4 +42,4 @@ open class TemplateApi(open val data: DataTemplate) { onSuccess(json) } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateData.kt similarity index 69% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateData.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateData.kt index 494ea1d9..d0833c02 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateData.kt @@ -2,16 +2,16 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.data +package pl.szczodrzynski.edziennik.data.api.edziennik.template.data import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate -import pl.szczodrzynski.edziennik.api.v2.template.ENDPOINT_TEMPLATE_API_SAMPLE -import pl.szczodrzynski.edziennik.api.v2.template.ENDPOINT_TEMPLATE_WEB_SAMPLE -import pl.szczodrzynski.edziennik.api.v2.template.ENDPOINT_TEMPLATE_WEB_SAMPLE_2 -import pl.szczodrzynski.edziennik.api.v2.template.data.api.TemplateApiSample -import pl.szczodrzynski.edziennik.api.v2.template.data.web.TemplateWebSample -import pl.szczodrzynski.edziennik.api.v2.template.data.web.TemplateWebSample2 +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.edziennik.template.ENDPOINT_TEMPLATE_API_SAMPLE +import pl.szczodrzynski.edziennik.data.api.edziennik.template.ENDPOINT_TEMPLATE_WEB_SAMPLE +import pl.szczodrzynski.edziennik.data.api.edziennik.template.ENDPOINT_TEMPLATE_WEB_SAMPLE_2 +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.api.TemplateApiSample +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.web.TemplateWebSample +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.web.TemplateWebSample2 import pl.szczodrzynski.edziennik.utils.Utils class TemplateData(val data: DataTemplate, val onSuccess: () -> Unit) { @@ -56,4 +56,4 @@ class TemplateData(val data: DataTemplate, val onSuccess: () -> Unit) { else -> onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateWeb.kt similarity index 78% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateWeb.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateWeb.kt index 8e7f79c7..eabe71a6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/TemplateWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/TemplateWeb.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.data +package pl.szczodrzynski.edziennik.data.api.edziennik.template.data import com.google.gson.JsonObject -import pl.szczodrzynski.edziennik.api.v2.ERROR_TEMPLATE_WEB_OTHER -import pl.szczodrzynski.edziennik.api.v2.GET -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.ERROR_TEMPLATE_WEB_OTHER +import pl.szczodrzynski.edziennik.data.api.GET +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.currentTimeUnix open class TemplateWeb(open val data: DataTemplate) { @@ -42,4 +42,4 @@ open class TemplateWeb(open val data: DataTemplate) { onSuccess(json) } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/api/TemplateApiSample.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/api/TemplateApiSample.kt similarity index 79% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/api/TemplateApiSample.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/api/TemplateApiSample.kt index 470b81ef..e8f0a326 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/api/TemplateApiSample.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/api/TemplateApiSample.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.template.data.api import pl.szczodrzynski.edziennik.DAY import pl.szczodrzynski.edziennik.MainActivity -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate -import pl.szczodrzynski.edziennik.api.v2.template.ENDPOINT_TEMPLATE_API_SAMPLE -import pl.szczodrzynski.edziennik.api.v2.template.data.TemplateApi +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.edziennik.template.ENDPOINT_TEMPLATE_API_SAMPLE +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.TemplateApi import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS class TemplateApiSample(override val data: DataTemplate, @@ -36,4 +36,4 @@ class TemplateApiSample(override val data: DataTemplate, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/web/TemplateWebSample.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/web/TemplateWebSample.kt similarity index 80% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/web/TemplateWebSample.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/web/TemplateWebSample.kt index f015debd..5efca695 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/web/TemplateWebSample.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/web/TemplateWebSample.kt @@ -2,14 +2,14 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.template.data.web import pl.szczodrzynski.edziennik.DAY import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_GRADES import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_HOME -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate -import pl.szczodrzynski.edziennik.api.v2.template.ENDPOINT_TEMPLATE_WEB_SAMPLE -import pl.szczodrzynski.edziennik.api.v2.template.data.TemplateWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.edziennik.template.ENDPOINT_TEMPLATE_WEB_SAMPLE +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.TemplateWeb import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS class TemplateWebSample(override val data: DataTemplate, @@ -37,4 +37,4 @@ class TemplateWebSample(override val data: DataTemplate, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/web/TemplateWebSample2.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/web/TemplateWebSample2.kt similarity index 79% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/web/TemplateWebSample2.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/web/TemplateWebSample2.kt index 7a3cdb33..af12c16e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/data/web/TemplateWebSample2.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/data/web/TemplateWebSample2.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.data.web +package pl.szczodrzynski.edziennik.data.api.edziennik.template.data.web import pl.szczodrzynski.edziennik.DAY import pl.szczodrzynski.edziennik.MainActivity -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate -import pl.szczodrzynski.edziennik.api.v2.template.ENDPOINT_TEMPLATE_WEB_SAMPLE_2 -import pl.szczodrzynski.edziennik.api.v2.template.data.TemplateWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.edziennik.template.ENDPOINT_TEMPLATE_WEB_SAMPLE_2 +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.TemplateWeb import pl.szczodrzynski.edziennik.data.db.modules.api.SYNC_ALWAYS class TemplateWebSample2(override val data: DataTemplate, @@ -36,4 +36,4 @@ class TemplateWebSample2(override val data: DataTemplate, onSuccess() } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/firstlogin/TemplateFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/firstlogin/TemplateFirstLogin.kt similarity index 71% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/firstlogin/TemplateFirstLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/firstlogin/TemplateFirstLogin.kt index f9430721..54654f08 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/firstlogin/TemplateFirstLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/firstlogin/TemplateFirstLogin.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-27. */ -package pl.szczodrzynski.edziennik.api.v2.template.firstlogin +package pl.szczodrzynski.edziennik.data.api.edziennik.template.firstlogin -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate -import pl.szczodrzynski.edziennik.api.v2.template.data.TemplateApi -import pl.szczodrzynski.edziennik.api.v2.template.data.TemplateWeb +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.TemplateApi +import pl.szczodrzynski.edziennik.data.api.edziennik.template.data.TemplateWeb import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile class TemplateFirstLogin(val data: DataTemplate, val onSuccess: () -> Unit) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLogin.kt similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLogin.kt index 82937c4a..b11eef13 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLogin.kt @@ -2,12 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.login +package pl.szczodrzynski.edziennik.data.api.edziennik.template.login import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_TEMPLATE_API -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_TEMPLATE_WEB -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_TEMPLATE_API +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_TEMPLATE_WEB +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate import pl.szczodrzynski.edziennik.utils.Utils class TemplateLogin(val data: DataTemplate, val onSuccess: () -> Unit) { @@ -56,4 +56,4 @@ class TemplateLogin(val data: DataTemplate, val onSuccess: () -> Unit) { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLoginApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLoginApi.kt similarity index 74% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLoginApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLoginApi.kt index ab044e5f..fc1fc20e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLoginApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLoginApi.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.login +package pl.szczodrzynski.edziennik.data.api.edziennik.template.login import pl.szczodrzynski.edziennik.HOUR -import pl.szczodrzynski.edziennik.api.v2.ERROR_LOGIN_DATA_MISSING -import pl.szczodrzynski.edziennik.api.v2.ERROR_PROFILE_MISSING -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.ERROR_LOGIN_DATA_MISSING +import pl.szczodrzynski.edziennik.data.api.ERROR_PROFILE_MISSING +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.currentTimeUnix class TemplateLoginApi(val data: DataTemplate, val onSuccess: () -> Unit) { @@ -42,4 +42,4 @@ class TemplateLoginApi(val data: DataTemplate, val onSuccess: () -> Unit) { data.apiExpiryTime = currentTimeUnix() + 24 * HOUR onSuccess() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLoginWeb.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLoginWeb.kt similarity index 80% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLoginWeb.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLoginWeb.kt index 1ab34895..fac39d50 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/template/login/TemplateLoginWeb.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/template/login/TemplateLoginWeb.kt @@ -2,13 +2,13 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-5. */ -package pl.szczodrzynski.edziennik.api.v2.template.login +package pl.szczodrzynski.edziennik.data.api.edziennik.template.login import okhttp3.Cookie -import pl.szczodrzynski.edziennik.api.v2.ERROR_LOGIN_DATA_MISSING -import pl.szczodrzynski.edziennik.api.v2.ERROR_PROFILE_MISSING -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.ERROR_LOGIN_DATA_MISSING +import pl.szczodrzynski.edziennik.data.api.ERROR_PROFILE_MISSING +import pl.szczodrzynski.edziennik.data.api.edziennik.template.DataTemplate +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.currentTimeUnix class TemplateLoginWeb(val data: DataTemplate, val onSuccess: () -> Unit) { @@ -50,4 +50,4 @@ class TemplateLoginWeb(val data: DataTemplate, val onSuccess: () -> Unit) { data.webExpiryTime = currentTimeUnix() + 45 * 60 /* 45min */ onSuccess() } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/DataVulcan.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/DataVulcan.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/DataVulcan.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/DataVulcan.kt index b2ac7669..c1d5f1fb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/DataVulcan.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/DataVulcan.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.vulcan +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_VULCAN_API -import pl.szczodrzynski.edziennik.api.v2.models.Data +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_VULCAN_API +import pl.szczodrzynski.edziennik.data.api.models.Data import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile import pl.szczodrzynski.edziennik.isNotNullNorEmpty diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/Vulcan.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/Vulcan.kt similarity index 77% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/Vulcan.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/Vulcan.kt index 36efeda8..c30f1fd0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/Vulcan.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/Vulcan.kt @@ -2,22 +2,23 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.vulcan +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.CODE_INTERNAL_LIBRUS_ACCOUNT_410 -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikCallback -import pl.szczodrzynski.edziennik.api.v2.interfaces.EdziennikInterface -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.prepare -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanData -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.api.VulcanApiMessagesChangeStatus -import pl.szczodrzynski.edziennik.api.v2.vulcan.firstlogin.VulcanFirstLogin -import pl.szczodrzynski.edziennik.api.v2.vulcan.login.VulcanLogin -import pl.szczodrzynski.edziennik.api.v2.vulcan.login.VulcanLoginApi -import pl.szczodrzynski.edziennik.api.v2.vulcanLoginMethods +import pl.szczodrzynski.edziennik.data.api.CODE_INTERNAL_LIBRUS_ACCOUNT_410 +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanData +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.VulcanApiMessagesChangeStatus +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.firstlogin.VulcanFirstLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLogin +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLoginApi +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.prepare +import pl.szczodrzynski.edziennik.data.api.vulcanLoginMethods 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.profiles.Profile import pl.szczodrzynski.edziennik.utils.Utils.d @@ -39,7 +40,7 @@ class Vulcan(val app: App, val profile: Profile?, val loginStore: LoginStore, va private fun completed() { data.saveData() - data.notifyAndSyncEvents { + data.notify { callback.onCompleted() } } @@ -76,7 +77,7 @@ class Vulcan(val app: App, val profile: Profile?, val loginStore: LoginStore, va } - override fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) { + override fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) { } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/VulcanFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/VulcanFeatures.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt index e039609d..bf6c080b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/VulcanFeatures.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/VulcanFeatures.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.vulcan +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.Feature +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.models.Feature const val ENDPOINT_VULCAN_API_STUDENT_LIST = 1000 const val ENDPOINT_VULCAN_API_DICTIONARIES = 1010 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/VulcanApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanApi.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/VulcanApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanApi.kt index 0345c0a0..85ea8417 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/VulcanApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanApi.kt @@ -2,7 +2,7 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-19 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data import com.google.gson.JsonArray import com.google.gson.JsonObject @@ -10,9 +10,9 @@ import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.JsonCallbackHandler import io.github.wulkanowy.signer.android.signContent -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.data.db.modules.teams.Team import pl.szczodrzynski.edziennik.utils.Utils import pl.szczodrzynski.edziennik.utils.Utils.d diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/VulcanData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/VulcanData.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt index 66936a65..378c5102 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/VulcanData.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/VulcanData.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.vulcan.* -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.* +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api.* import pl.szczodrzynski.edziennik.utils.Utils class VulcanData(val data: DataVulcan, val onSuccess: () -> Unit) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiAttendance.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiAttendance.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiAttendance.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiAttendance.kt index 174eed18..c2df68a1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiAttendance.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiAttendance.kt @@ -1,11 +1,11 @@ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import androidx.core.util.isEmpty import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_ATTENDANCE -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_ATTENDANCE -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_ATTENDANCE +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_ATTENDANCE +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi 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.TYPE_PRESENT diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiDictionaries.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiDictionaries.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiDictionaries.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiDictionaries.kt index 376a13b1..b5ef18e1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiDictionaries.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiDictionaries.kt @@ -2,14 +2,14 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-20 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_DICTIONARIES -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_DICTIONARIES -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_DICTIONARIES +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_DICTIONARIES +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi 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.grades.GradeCategory diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiEvents.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiEvents.kt similarity index 82% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiEvents.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiEvents.kt index bcd02b6a..045c80f7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiEvents.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiEvents.kt @@ -2,15 +2,15 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-20 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_EVENTS -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_EVENTS -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_HOMEWORK -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_EVENTS +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_HOMEWORK +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_EVENTS +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_HOMEWORK +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi +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.events.Event import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata @@ -53,10 +53,11 @@ class VulcanApiEvents(override val data: DataVulcan, private val isHomework: Boo val eventDate = Date.fromY_m_d(event.getString("DataTekst") ?: return@forEach) val subjectId = event.getLong("IdPrzedmiot") ?: -1 val teacherId = event.getLong("IdPracownik") ?: -1 - val startTime = data.lessonList.singleOrNull { - it.weekDay == eventDate.weekDay && it.subjectId == subjectId - }?.startTime val topic = event.getString("Opis") ?: "" + + val lessonList = data.db.timetableDao().getForDateNow(profileId, eventDate) + val startTime = lessonList.firstOrNull { it.subjectId == subjectId }?.startTime + val type = when (isHomework) { true -> Event.TYPE_HOMEWORK else -> when (event.getBoolean("Rodzaj")) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiGrades.kt similarity index 90% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiGrades.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiGrades.kt index 281713ac..d86d530a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiGrades.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-19 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_GRADES -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_GRADES -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_GRADES +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi 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.metadata.Metadata @@ -102,8 +102,8 @@ class VulcanApiGrades(override val data: DataVulcan, val onSuccess: () -> Unit) profileId, Metadata.TYPE_GRADE, id, - profile?.empty ?: false, - profile?.empty ?: false, + profile.empty, + profile.empty, addedDate )) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesChangeStatus.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesChangeStatus.kt similarity index 86% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesChangeStatus.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesChangeStatus.kt index 098edfb2..435c1d27 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesChangeStatus.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesChangeStatus.kt @@ -2,11 +2,11 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-12 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_MESSAGES_CHANGE_STATUS -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_MESSAGES_CHANGE_STATUS +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi import pl.szczodrzynski.edziennik.data.db.modules.messages.Message.TYPE_SENT import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageRecipient diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesInbox.kt similarity index 91% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesInbox.kt index 10b516a7..dac68ecb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesInbox.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesInbox.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-01 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_MESSAGES_RECEIVED -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_MESSAGES_INBOX -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_MESSAGES_RECEIVED +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_MESSAGES_INBOX +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi 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.TYPE_RECEIVED diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesSent.kt similarity index 92% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesSent.kt index 87899a36..0cc03534 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiMessagesSent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiMessagesSent.kt @@ -2,14 +2,14 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-5 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_MESSAGES -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_MESSAGES_SENT -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_MESSAGES_SENT -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_MESSAGES_SENT +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_MESSAGES_SENT +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi 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.MessageRecipient diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiNotices.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiNotices.kt similarity index 85% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiNotices.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiNotices.kt index 6407dddd..eebe6c29 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiNotices.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiNotices.kt @@ -2,13 +2,13 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-23 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import androidx.core.util.isEmpty -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_NOTICES -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_NOTICES -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_NOTICES +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_NOTICES +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi 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.notices.Notice diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiProposedGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiProposedGrades.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiProposedGrades.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiProposedGrades.kt index 8289a549..c647af2b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiProposedGrades.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiProposedGrades.kt @@ -1,11 +1,11 @@ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import com.google.gson.JsonArray import pl.szczodrzynski.edziennik.HOUR -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_GRADES_PROPOSITIONS -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_GRADES_SUMMARY -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_GRADES_PROPOSITIONS +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_GRADES_SUMMARY +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi import pl.szczodrzynski.edziennik.asJsonObjectList import pl.szczodrzynski.edziennik.data.db.modules.grades.Grade import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiTemplate.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiTemplate.kt similarity index 68% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiTemplate.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiTemplate.kt index c62a0de8..adda3dd0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiTemplate.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiTemplate.kt @@ -2,10 +2,10 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-20 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi class VulcanApiTemplate(override val data: DataVulcan, val onSuccess: () -> Unit) : VulcanApi(data) { companion object { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiTimetable.kt similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiTimetable.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiTimetable.kt index 882f6e59..41badfeb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/data/api/VulcanApiTimetable.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/data/api/VulcanApiTimetable.kt @@ -2,16 +2,16 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-13 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.data.api +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.api import androidx.core.util.set import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.Regexes -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_TIMETABLE -import pl.szczodrzynski.edziennik.api.v2.models.DataRemoveModel -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.ENDPOINT_VULCAN_API_TIMETABLE -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.Regexes +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_TIMETABLE +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.ENDPOINT_VULCAN_API_TIMETABLE +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi +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.metadata.Metadata import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/firstlogin/VulcanFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/firstlogin/VulcanFirstLogin.kt similarity index 89% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/firstlogin/VulcanFirstLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/firstlogin/VulcanFirstLogin.kt index 61f38f53..b82388d1 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/firstlogin/VulcanFirstLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/firstlogin/VulcanFirstLogin.kt @@ -2,17 +2,17 @@ * Copyright (c) Kacper Ziubryniewicz 2019-10-19 */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.firstlogin +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.firstlogin import org.greenrobot.eventbus.EventBus import pl.szczodrzynski.edziennik.* -import pl.szczodrzynski.edziennik.api.v2.ERROR_NO_STUDENTS_IN_ACCOUNT -import pl.szczodrzynski.edziennik.api.v2.VULCAN_API_ENDPOINT_STUDENT_LIST -import pl.szczodrzynski.edziennik.api.v2.events.FirstLoginFinishedEvent -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan -import pl.szczodrzynski.edziennik.api.v2.vulcan.data.VulcanApi -import pl.szczodrzynski.edziennik.api.v2.vulcan.login.VulcanLoginApi +import pl.szczodrzynski.edziennik.data.api.ERROR_NO_STUDENTS_IN_ACCOUNT +import pl.szczodrzynski.edziennik.data.api.VULCAN_API_ENDPOINT_STUDENT_LIST +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.data.VulcanApi +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login.VulcanLoginApi +import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile import pl.szczodrzynski.edziennik.utils.models.Date diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/login/VulcanLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/login/VulcanLogin.kt similarity index 87% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/login/VulcanLogin.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/login/VulcanLogin.kt index cb3db3eb..4c11caf3 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/login/VulcanLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/login/VulcanLogin.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.login +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login import pl.szczodrzynski.edziennik.R -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_VULCAN_API -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_VULCAN_API +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan import pl.szczodrzynski.edziennik.utils.Utils class VulcanLogin(val data: DataVulcan, val onSuccess: () -> Unit) { @@ -51,4 +51,4 @@ class VulcanLogin(val data: DataVulcan, val onSuccess: () -> Unit) { } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/login/VulcanLoginApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/login/VulcanLoginApi.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/login/VulcanLoginApi.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/login/VulcanLoginApi.kt index 8c58f760..dfa1c2ac 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/vulcan/login/VulcanLoginApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/vulcan/login/VulcanLoginApi.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-6. */ -package pl.szczodrzynski.edziennik.api.v2.vulcan.login +package pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.login import android.os.Build import com.google.gson.JsonObject @@ -10,9 +10,9 @@ import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response import im.wangchao.mhttp.callback.JsonCallbackHandler import io.github.wulkanowy.signer.android.getPrivateKeyFromCert -import pl.szczodrzynski.edziennik.api.v2.* -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.DataVulcan +import pl.szczodrzynski.edziennik.data.api.models.ApiError import pl.szczodrzynski.edziennik.currentTimeUnix import pl.szczodrzynski.edziennik.getJsonObject import pl.szczodrzynski.edziennik.getString diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskAllFinishedEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskAllFinishedEvent.kt new file mode 100644 index 00000000..a5d026cb --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskAllFinishedEvent.kt @@ -0,0 +1,7 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-9-28. + */ + +package pl.szczodrzynski.edziennik.data.api.events + +class ApiTaskAllFinishedEvent diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskErrorEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskErrorEvent.kt new file mode 100644 index 00000000..11c1813f --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskErrorEvent.kt @@ -0,0 +1,9 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-9-28. + */ + +package pl.szczodrzynski.edziennik.data.api.events + +import pl.szczodrzynski.edziennik.data.api.models.ApiError + +class ApiTaskErrorEvent(val error: ApiError) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskFinishedEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskFinishedEvent.kt new file mode 100644 index 00000000..7dba791d --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskFinishedEvent.kt @@ -0,0 +1,7 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-9-28. + */ + +package pl.szczodrzynski.edziennik.data.api.events + +class ApiTaskFinishedEvent(val profileId: Int) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskProgressEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskProgressEvent.kt similarity index 59% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskProgressEvent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskProgressEvent.kt index e639a0ac..cc7463dc 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskProgressEvent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskProgressEvent.kt @@ -2,6 +2,6 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-28. */ -package pl.szczodrzynski.edziennik.api.v2.events +package pl.szczodrzynski.edziennik.data.api.events -class ApiTaskProgressEvent(val profileId: Int, val progress: Float, val progressText: String?) \ No newline at end of file +class ApiTaskProgressEvent(val profileId: Int, val progress: Float, val progressText: String?) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskStartedEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskStartedEvent.kt similarity index 75% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskStartedEvent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskStartedEvent.kt index b8af894e..20783e4b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/ApiTaskStartedEvent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/ApiTaskStartedEvent.kt @@ -2,8 +2,8 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-28. */ -package pl.szczodrzynski.edziennik.api.v2.events +package pl.szczodrzynski.edziennik.data.api.events import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile -class ApiTaskStartedEvent(val profileId: Int, val profile: Profile? = null) \ No newline at end of file +class ApiTaskStartedEvent(val profileId: Int, val profile: Profile? = null) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/AttachmentGetEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/AttachmentGetEvent.kt similarity index 88% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/AttachmentGetEvent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/AttachmentGetEvent.kt index cc17291b..cbc85b7d 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/AttachmentGetEvent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/AttachmentGetEvent.kt @@ -2,7 +2,7 @@ * Copyright (c) Kacper Ziubryniewicz 2019-11-24 */ -package pl.szczodrzynski.edziennik.api.v2.events +package pl.szczodrzynski.edziennik.data.api.events data class AttachmentGetEvent(val profileId: Int, val messageId: Long, val attachmentId: Long, var eventType: Int = TYPE_PROGRESS, val fileName: String? = null, diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/FirstLoginFinishedEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/FirstLoginFinishedEvent.kt similarity index 70% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/FirstLoginFinishedEvent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/FirstLoginFinishedEvent.kt index 31fba7c9..b74ef2c7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/FirstLoginFinishedEvent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/FirstLoginFinishedEvent.kt @@ -1,6 +1,6 @@ -package pl.szczodrzynski.edziennik.api.v2.events +package pl.szczodrzynski.edziennik.data.api.events import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile -data class FirstLoginFinishedEvent(val profileList: List, val loginStore: LoginStore) \ No newline at end of file +data class FirstLoginFinishedEvent(val profileList: List, val loginStore: LoginStore) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/MessageGetEvent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/MessageGetEvent.kt similarity index 55% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/MessageGetEvent.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/MessageGetEvent.kt index 353667ac..b9d72295 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/events/MessageGetEvent.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/MessageGetEvent.kt @@ -2,8 +2,8 @@ * Copyright (c) Kuba Szczodrzyński 2019-11-12. */ -package pl.szczodrzynski.edziennik.api.v2.events +package pl.szczodrzynski.edziennik.data.api.events import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull -data class MessageGetEvent(val message: MessageFull) \ No newline at end of file +data class MessageGetEvent(val message: MessageFull) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/requests/ServiceCloseRequest.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/requests/ServiceCloseRequest.kt new file mode 100644 index 00000000..a4a696a4 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/requests/ServiceCloseRequest.kt @@ -0,0 +1,7 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-10-1. + */ + +package pl.szczodrzynski.edziennik.data.api.events.requests + +class ServiceCloseRequest diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/requests/TaskCancelRequest.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/requests/TaskCancelRequest.kt new file mode 100644 index 00000000..2985daac --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/events/requests/TaskCancelRequest.kt @@ -0,0 +1,7 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2019-10-1. + */ + +package pl.szczodrzynski.edziennik.data.api.events.requests + +class TaskCancelRequest(val taskId: Int) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EdziennikCallback.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikCallback.kt similarity index 62% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EdziennikCallback.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikCallback.kt index 5ce22d96..c1c878b4 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EdziennikCallback.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikCallback.kt @@ -2,10 +2,10 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-29. */ -package pl.szczodrzynski.edziennik.api.v2.interfaces +package pl.szczodrzynski.edziennik.data.api.interfaces -import pl.szczodrzynski.edziennik.api.v2.models.Feature -import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod +import pl.szczodrzynski.edziennik.data.api.models.Feature +import pl.szczodrzynski.edziennik.data.api.models.LoginMethod /** * A callback passed only to an e-register class. @@ -14,4 +14,4 @@ import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod */ interface EdziennikCallback : EndpointCallback { fun onCompleted() -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EdziennikInterface.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.kt similarity index 66% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EdziennikInterface.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.kt index 3f8a0373..e3e11066 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EdziennikInterface.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EdziennikInterface.kt @@ -2,16 +2,17 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-29. */ -package pl.szczodrzynski.edziennik.api.v2.interfaces +package pl.szczodrzynski.edziennik.data.api.interfaces import com.google.gson.JsonObject +import pl.szczodrzynski.edziennik.data.db.modules.messages.Message import pl.szczodrzynski.edziennik.data.db.modules.messages.MessageFull interface EdziennikInterface { fun sync(featureIds: List, viewId: Int? = null, arguments: JsonObject? = null) fun getMessage(message: MessageFull) fun markAllAnnouncementsAsRead() - fun getAttachment(messageId: Long, attachmentId: Long, attachmentName: String) + fun getAttachment(message: Message, attachmentId: Long, attachmentName: String) fun firstLogin() fun cancel() } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EndpointCallback.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EndpointCallback.kt similarity index 52% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EndpointCallback.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EndpointCallback.kt index daddcb9a..b44820c5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/interfaces/EndpointCallback.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/interfaces/EndpointCallback.kt @@ -2,11 +2,11 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-29. */ -package pl.szczodrzynski.edziennik.api.v2.interfaces +package pl.szczodrzynski.edziennik.data.api.interfaces -import pl.szczodrzynski.edziennik.api.v2.models.ApiError -import pl.szczodrzynski.edziennik.api.v2.models.Feature -import pl.szczodrzynski.edziennik.api.v2.models.LoginMethod +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.models.Feature +import pl.szczodrzynski.edziennik.data.api.models.LoginMethod /** * A callback passed to all [Feature]s and [LoginMethod]s @@ -15,4 +15,4 @@ interface EndpointCallback { fun onError(apiError: ApiError) fun onProgress(step: Float) fun onStartProgress(stringRes: Int) -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/ApiError.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/ApiError.kt similarity index 94% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/ApiError.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/ApiError.kt index effe2a72..78785ef7 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/ApiError.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/ApiError.kt @@ -2,13 +2,12 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-28. */ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.models import android.content.Context import com.google.gson.JsonObject import im.wangchao.mhttp.Request import im.wangchao.mhttp.Response -import pl.szczodrzynski.edziennik.data.api.AppError class ApiError(val tag: String, val errorCode: Int) { var profileId: Int? = null @@ -67,4 +66,4 @@ class ApiError(val tag: String, val errorCode: Int) { } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/AppError.java similarity index 99% rename from app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/AppError.java index 440bc0bb..018d042f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/AppError.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/AppError.java @@ -1,4 +1,8 @@ -package pl.szczodrzynski.edziennik.data.api; +/* + * Copyright (c) Kacper Ziubryniewicz 2019-11-26 + */ + +package pl.szczodrzynski.edziennik.data.api.models; import android.content.Context; import android.os.AsyncTask; diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Data.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/Data.kt similarity index 96% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Data.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/Data.kt index e1f123fb..fddb4be0 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Data.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/Data.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.models import android.util.LongSparseArray import android.util.SparseArray @@ -6,11 +6,10 @@ import androidx.core.util.size import com.google.gson.JsonObject import im.wangchao.mhttp.Response import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.api.v2.DataNotifications -import pl.szczodrzynski.edziennik.api.v2.EXCEPTION_NOTIFY_AND_SYNC -import pl.szczodrzynski.edziennik.api.v2.ServerSync -import pl.szczodrzynski.edziennik.api.v2.interfaces.EndpointCallback -import pl.szczodrzynski.edziennik.data.api.AppError.* +import pl.szczodrzynski.edziennik.data.api.DataNotifications +import pl.szczodrzynski.edziennik.data.api.EXCEPTION_NOTIFY +import pl.szczodrzynski.edziennik.data.api.interfaces.EndpointCallback +import pl.szczodrzynski.edziennik.data.api.models.AppError.* import pl.szczodrzynski.edziennik.data.db.AppDb import pl.szczodrzynski.edziennik.data.db.modules.announcements.Announcement import pl.szczodrzynski.edziennik.data.db.modules.api.EndpointTimer @@ -331,19 +330,17 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore) db.messageRecipientDao().addAllIgnore(messageRecipientIgnoreList) } - fun notifyAndSyncEvents(onSuccess: () -> Unit) { + fun notify(onSuccess: () -> Unit) { if (profile == null) { onSuccess() return } try { DataNotifications(this) - ServerSync(this) { - db.notificationDao().addAll(notifications) - onSuccess() - } + db.notificationDao().addAll(notifications) + onSuccess() } catch (e: Exception) { - error(ApiError(TAG, EXCEPTION_NOTIFY_AND_SYNC) + error(ApiError(TAG, EXCEPTION_NOTIFY) .withThrowable(e)) } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataRemoveModel.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/DataRemoveModel.kt similarity index 97% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataRemoveModel.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/DataRemoveModel.kt index 984e9292..2cbd67d9 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/DataRemoveModel.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/DataRemoveModel.kt @@ -2,7 +2,7 @@ * Copyright (c) Kuba Szczodrzyński 2019-10-2. */ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.models import pl.szczodrzynski.edziennik.data.db.modules.events.EventDao import pl.szczodrzynski.edziennik.data.db.modules.grades.GradeDao diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/Feature.kt similarity index 95% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/Feature.kt index 380c34ad..fd7c7873 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/Feature.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/Feature.kt @@ -1,4 +1,4 @@ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.models /** * A Endpoint descriptor class. @@ -30,4 +30,4 @@ data class Feature( this.shouldSync = shouldSync return this } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/LoginMethod.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/LoginMethod.kt similarity index 93% rename from app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/LoginMethod.kt rename to app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/LoginMethod.kt index 95559feb..e5efbd0c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/api/v2/models/LoginMethod.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/models/LoginMethod.kt @@ -2,9 +2,9 @@ * Copyright (c) Kuba Szczodrzyński 2019-9-20. */ -package pl.szczodrzynski.edziennik.api.v2.models +package pl.szczodrzynski.edziennik.data.api.models -import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_NOT_NEEDED +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_NOT_NEEDED import pl.szczodrzynski.edziennik.data.db.modules.login.LoginStore import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile @@ -43,4 +43,4 @@ class LoginMethod( fun requiredLoginMethod(profile: Profile?, loginStore: LoginStore): Int { return mRequiredLoginMethod?.invoke(profile, loginStore) ?: LOGIN_METHOD_NOT_NEEDED } -} \ No newline at end of file +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt new file mode 100644 index 00000000..867d2690 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt @@ -0,0 +1,52 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-13 + */ + +package pl.szczodrzynski.edziennik.data.api.szkolny + +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull +import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull + +class Szkolny(val app: App, val callback: EdziennikCallback) { + + private val api = SzkolnyApi(app) + + fun sync(profiles: List) { + if (profiles.isNotEmpty()) { + val events = api.getEvents(profiles) + + if (events.isNotEmpty()) { + app.db.eventDao().addAll(events) + app.db.metadataDao().addAllIgnore(events.map { event -> + Metadata( + event.profileId, + Metadata.TYPE_EVENT, + event.id, + event.seen, + event.notified, + event.addedDate + ) + }) + } + } + + completed() + } + + fun shareEvent(event: EventFull) { + api.shareEvent(event) + completed() + } + + fun unshareEvent(event: EventFull) { + api.unshareEvent(event) + completed() + } + + private fun completed() { + callback.onCompleted() + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt new file mode 100644 index 00000000..af126adf --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt @@ -0,0 +1,124 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-8 + */ + +package pl.szczodrzynski.edziennik.data.api.szkolny + +import android.os.Build +import com.google.gson.GsonBuilder +import okhttp3.OkHttpClient +import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.BuildConfig +import pl.szczodrzynski.edziennik.data.api.szkolny.adapter.DateAdapter +import pl.szczodrzynski.edziennik.data.api.szkolny.adapter.TimeAdapter +import pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.SignatureInterceptor +import pl.szczodrzynski.edziennik.data.api.szkolny.request.EventShareRequest +import pl.szczodrzynski.edziennik.data.api.szkolny.request.ServerSyncRequest +import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull +import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull +import pl.szczodrzynski.edziennik.utils.models.Date +import pl.szczodrzynski.edziennik.utils.models.Time +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import retrofit2.create +import java.util.concurrent.TimeUnit.SECONDS + +class SzkolnyApi(val app: App) { + + private val api: SzkolnyService + + init { + val okHttpClient: OkHttpClient = app.http.newBuilder() + .followRedirects(true) + .callTimeout(30, SECONDS) + .addInterceptor(SignatureInterceptor(app)) + .build() + + val gsonConverterFactory = GsonConverterFactory.create( + GsonBuilder() + .setLenient() + .registerTypeAdapter(Date::class.java, DateAdapter()) + .registerTypeAdapter(Time::class.java, TimeAdapter()) + .create()) + + val retrofit: Retrofit = Retrofit.Builder() + .baseUrl("https://api.szkolny.eu/") + .addConverterFactory(gsonConverterFactory) + .client(okHttpClient) + .build() + + api = retrofit.create() + } + + fun getEvents(profiles: List): List { + val teams = app.db.teamDao().allNow + val notifications = app.db.notificationDao().getNotPostedNow() + + val response = api.serverSync(ServerSyncRequest( + deviceId = app.deviceId, + device = ServerSyncRequest.Device( + osType = "Android", + osVersion = Build.VERSION.RELEASE, + hardware = "${Build.MANUFACTURER} ${Build.MODEL}", + pushToken = app.config.sync.tokenApp, + appVersion = BuildConfig.VERSION_NAME, + appType = BuildConfig.BUILD_TYPE, + appVersionCode = BuildConfig.VERSION_CODE, + syncInterval = app.config.sync.interval + ), + userCodes = profiles.map { it.usernameId }, + users = profiles.map { profile -> + ServerSyncRequest.User( + profile.usernameId, + profile.studentNameLong ?: "", + profile.studentNameShort ?: "", + profile.loginStoreType, + teams.filter { it.profileId == profile.id }.map { it.code } + ) + }, + notifications = notifications.map { ServerSyncRequest.Notification(it.profileName ?: "", it.type, it.text) } + )).execute().body() + + val events = mutableListOf() + + response?.data?.events?.forEach { event -> + teams.filter { it.code == event.teamCode }.forEach { team -> + val profile = profiles.firstOrNull { it.id == team.profileId } + + events.add(event.apply { + profileId = team.profileId + teamId = team.id + addedManually = true + seen = profile?.empty ?: false + notified = profile?.empty ?: false + + if (profile?.usernameId == event.sharedBy) sharedBy = "self" + }) + } + } + + return events + } + + fun shareEvent(event: EventFull) { + val team = app.db.teamDao().getByIdNow(event.profileId, event.teamId) + + api.shareEvent(EventShareRequest( + deviceId = app.deviceId, + sharedByName = event.sharedByName, + shareTeamCode = team.code, + event = event + )).execute() + } + + fun unshareEvent(event: EventFull) { + val team = app.db.teamDao().getByIdNow(event.profileId, event.teamId) + + api.shareEvent(EventShareRequest( + deviceId = app.deviceId, + sharedByName = event.sharedByName, + unshareTeamCode = team.code, + eventId = event.id + )).execute() + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyService.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyService.kt new file mode 100644 index 00000000..73918e67 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyService.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-8 + */ + +package pl.szczodrzynski.edziennik.data.api.szkolny + +import pl.szczodrzynski.edziennik.data.api.szkolny.request.EventShareRequest +import pl.szczodrzynski.edziennik.data.api.szkolny.request.ServerSyncRequest +import pl.szczodrzynski.edziennik.data.api.szkolny.response.ApiResponse +import pl.szczodrzynski.edziennik.data.api.szkolny.response.ServerSyncResponse +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.POST + +interface SzkolnyService { + + @POST("appSync") + fun serverSync(@Body request: ServerSyncRequest): Call> + + @POST("share") + fun shareEvent(@Body request: EventShareRequest): Call> +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/adapter/DateAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/adapter/DateAdapter.kt new file mode 100644 index 00000000..01f2d6ef --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/adapter/DateAdapter.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-8 + */ + +package pl.szczodrzynski.edziennik.data.api.szkolny.adapter + +import com.google.gson.TypeAdapter +import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonToken +import com.google.gson.stream.JsonWriter +import pl.szczodrzynski.edziennik.utils.models.Date + +class DateAdapter : TypeAdapter() { + override fun write(writer: JsonWriter?, date: Date?) { + if (date == null) { + writer?.nullValue() + } else { + writer?.value(date.value) + } + } + + override fun read(reader: JsonReader?): Date? { + if (reader?.peek() == JsonToken.NULL) { + reader.nextNull() + return null + } + return reader?.nextInt()?.let { Date.fromValue(it) } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/adapter/TimeAdapter.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/adapter/TimeAdapter.kt new file mode 100644 index 00000000..69abca66 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/adapter/TimeAdapter.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2019-12-8 + */ + +package pl.szczodrzynski.edziennik.data.api.szkolny.adapter + +import com.google.gson.TypeAdapter +import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonToken +import com.google.gson.stream.JsonWriter +import pl.szczodrzynski.edziennik.utils.models.Time + +class TimeAdapter : TypeAdapter