forked from github/wulkanowy-mirror
Compare commits
5 Commits
f2857bdece
...
cb553b1a33
Author | SHA1 | Date | |
---|---|---|---|
cb553b1a33 | |||
f5a95421a1 | |||
![]() |
26596e8254 | ||
![]() |
6e472d6c5c | ||
![]() |
6f4826249c |
52
README.cs.md
52
README.cs.md
@ -8,30 +8,34 @@
|
|||||||
* Skrýt komentáře.
|
* Skrýt komentáře.
|
||||||
* falešná docházka %
|
* falešná docházka %
|
||||||
|
|
||||||
Přístup ke skrytému panelu:
|
Chcete-li se dostat na skrytý panel:
|
||||||
1. přejděte na záložku "Více".
|
1. Přejděte na kartu „Další“.
|
||||||
2. přejděte na panel "Nastavení".
|
2. Přejděte na panel „Nastavení“.
|
||||||
3. přejděte na panel "O aplikaci".
|
3. Přejděte na panel „O aplikaci“.
|
||||||
4. klikněte pětkrát na logo aplikace
|
4. Klikněte 5x na logo aplikace
|
||||||
5. přejděte zpět do nastavení (budete muset obnovit zobrazení, přejít na domovskou obrazovku a vrátit se do nastavení).
|
5. Přejděte na domovskou obrazovku
|
||||||
|
6. Přejděte do nastavení
|
||||||
|
7. Zadejte „tajná nastavení“
|
||||||
|
|
||||||
# Instalace
|
# Instalace
|
||||||
Legenda:
|
|
||||||
|
|
||||||
- `*-fdroid-*` - verze přizpůsobená F-Droid
|
| Název souboru | Přizpůsobeno |
|
||||||
- `*-hms-*` - verze přizpůsobená Huawei AppGallery
|
| ---------------- | ----------------- |
|
||||||
- `*-play-*` - verze přizpůsobená Obchodu Play
|
| `*-fdroid-*.apk` | F-Droid |
|
||||||
|
| `*-hms-*.apk` | Huawei AppGallery |
|
||||||
|
| `*-play-*.apk` | Play Store |
|
||||||
|
|
||||||
- Verze vydání (**doporučeno pro většinu uživatelů**)
|
1. Vydaná verze (**doporučeno pro většinu uživatelů**):
|
||||||
|
|
||||||
Stáhněte si vybranou verzi z [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
Stáhněte si vybranou verzi z [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
||||||
Doporučujeme stáhnout nejnovější dostupnou verzi.
|
Doporučujeme stáhnout nejnovější dostupnou verzi.
|
||||||
- Verze ladění (pro lidi, kteří chtějí ladit aplikaci, zejména požadavky na server VULCAN)
|
|
||||||
|
2. Verze ladění (pro lidi, kteří chtějí ladit aplikaci, zejména požadavky na server VULCAN):
|
||||||
Přejděte [sem](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
|
||||||
Přejděte na první výsledek shora nebo vyberte verzi DEV, kterou chcete stáhnout.
|
Přejděte [sem](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
||||||
Stáhněte si vybranou verzi ze souborů vygenerovaných při sestavování aplikace.
|
Přejděte na první výsledek shora nebo vyberte verzi DEV, kterou chcete stáhnout.
|
||||||
|
Stáhněte si vybranou verzi ze souborů vygenerovaných při sestavování aplikace.
|
||||||
> Chcete si přečíst více o projektu Wulkanowy?
|
|
||||||
>
|
# O projektu Wulkanowy
|
||||||
> [Klikněte zde](https://github.com/wulkanowy/wulkanowy)
|
|
||||||
|
Chcete si přečíst více o projektu Wulkanowy? [Klikněte sem](https://github.com/wulkanowy/wulkanowy)
|
50
README.de.md
50
README.de.md
@ -8,30 +8,34 @@
|
|||||||
* Kommentare ausblenden.
|
* Kommentare ausblenden.
|
||||||
* Anwesenheit fälschen %
|
* Anwesenheit fälschen %
|
||||||
|
|
||||||
So greifen Sie auf das verborgene Panel zu:
|
So gelangen Sie zum ausgeblendeten Bereich:
|
||||||
1. Gehen Sie auf die Registerkarte "Mehr".
|
1. Gehen Sie zur Registerkarte „Mehr“.
|
||||||
2. Gehen Sie zum Bereich "Einstellungen".
|
2. Gehen Sie zum Bereich „Einstellungen“.
|
||||||
3. Gehen Sie auf das Feld "Über die Anwendung".
|
3. Gehen Sie zum Bereich „Über die Anwendung“.
|
||||||
4. Klicken Sie 5 Mal auf das Logo der Anwendung
|
4. Klicken Sie fünfmal auf das Anwendungslogo
|
||||||
5. Gehen Sie zurück zu den Einstellungen (Sie müssen die Ansicht aktualisieren, zum Startbildschirm wechseln und zu den Einstellungen zurückkehren)
|
5. Gehen Sie zum Startbildschirm
|
||||||
|
6. Gehen Sie zu den Einstellungen
|
||||||
|
7. Geben Sie „Geheime Einstellungen“ ein
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
Legende:
|
|
||||||
|
|
||||||
- `*-fdroid-*` – an F-Droid angepasste Version
|
| Dateiname | Angepasst an |
|
||||||
- `*-hms-*` – an Huawei AppGallery angepasste Version
|
| ---------------- | ----------------- |
|
||||||
- `*-play-*` – an den Play Store angepasste Version
|
| `*-fdroid-*.apk` | F-Droid |
|
||||||
|
| `*-hms-*.apk` | Huawei AppGallery |
|
||||||
|
| `*-play-*.apk` | Play Store |
|
||||||
|
|
||||||
- Release-Version (**für die meisten Benutzer empfohlen**)
|
1. Release-Version (**empfohlen für die meisten Benutzer**):
|
||||||
|
|
||||||
Laden Sie die ausgewählte Version von [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases) herunter.
|
|
||||||
Wir empfehlen, die neueste verfügbare Version herunterzuladen.
|
|
||||||
- Debug-Version (für Leute, die die Anwendung debuggen möchten, insbesondere Anfragen an den VULCAN-Server)
|
|
||||||
|
|
||||||
Gehen Sie [hier](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
|
||||||
Gehen Sie zum ersten Ergebnis von oben oder wählen Sie die DEV-Version aus, die Sie herunterladen möchten.
|
|
||||||
Laden Sie die ausgewählte Version aus den beim Erstellen der Anwendung generierten Dateien herunter.
|
|
||||||
|
|
||||||
> Möchten Sie mehr über das Wulkanowy-Projekt lesen?
|
Laden Sie die ausgewählte Version von [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases) herunter.
|
||||||
>
|
Wir empfehlen, die neueste verfügbare Version herunterzuladen.
|
||||||
> [Klicken Sie hier](https://github.com/wulkanowy/wulkanowy)
|
|
||||||
|
2. Debug-Version (für Leute, die die Anwendung debuggen möchten, insbesondere Anfragen an den VULCAN-Server):
|
||||||
|
|
||||||
|
Gehen Sie [hier](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
||||||
|
Gehen Sie zum ersten Ergebnis von oben oder wählen Sie die DEV-Version aus, die Sie herunterladen möchten.
|
||||||
|
Laden Sie die ausgewählte Version aus den beim Erstellen der Anwendung generierten Dateien herunter.
|
||||||
|
|
||||||
|
# Über das Wulkanowy-Projekt
|
||||||
|
|
||||||
|
Möchten Sie mehr über das Wulkanowy-Projekt lesen? [Hier klicken](https://github.com/wulkanowy/wulkanowy)
|
48
README.en.md
48
README.en.md
@ -9,29 +9,33 @@
|
|||||||
* fake attendance %.
|
* fake attendance %.
|
||||||
|
|
||||||
To get to the hidden panel:
|
To get to the hidden panel:
|
||||||
1. go to the "More" tab
|
1. Go to the "More" tab
|
||||||
2. go to the "Settings" panel
|
2. Go to the "Settings" panel
|
||||||
3. go to the "About application" panel
|
3. Go to the "About application" panel
|
||||||
4. click 5 times on the application logo
|
4. Click on the application logo 5 times
|
||||||
5. go back to settings (a refresh of the view will be required, go to the home screen and return to settings)
|
5. Go to the home screen
|
||||||
|
6. Go to settings
|
||||||
|
7. Enter "secret settings"
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
Legend:
|
|
||||||
|
|
||||||
- `*-fdroid-*` - version adapted to F-Droid
|
| File name | Adapted to |
|
||||||
- `*-hms-*` - version adapted to Huawei AppGallery
|
| ---------------- | ----------------- |
|
||||||
- `*-play-*` - version adapted to the Play Store
|
| `*-fdroid-*.apk` | F-Droid |
|
||||||
|
| `*-hms-*.apk` | Huawei AppGallery |
|
||||||
|
| `*-play-*.apk` | Play Store |
|
||||||
|
|
||||||
- Release version (**recommended for most users**)
|
1. Release version (**recommended for most users**):
|
||||||
|
|
||||||
Download the selected version from [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
|
||||||
We recommend downloading the latest available version.
|
|
||||||
- Debug version (for people who want to debug the application, especially requests to the VULCAN server)
|
|
||||||
|
|
||||||
Go [here](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
|
||||||
Go to the first result from the top or select the DEV version you want to download.
|
|
||||||
Download the selected version from artifacts generated when building the application.
|
|
||||||
|
|
||||||
> Do you want to read more about the Wulkanowy project?
|
Download the selected version from [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
||||||
>
|
We recommend downloading the latest available version.
|
||||||
> [Click here](https://github.com/wulkanowy/wulkanowy)
|
|
||||||
|
2. Debug version (for people who want to debug the application, especially requests to the VULCAN server):
|
||||||
|
|
||||||
|
Go [here](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
||||||
|
Go to the first result from the top or select the DEV version you want to download.
|
||||||
|
Download the selected version from the files generated when building the application.
|
||||||
|
|
||||||
|
# About the Wulkanowy project
|
||||||
|
|
||||||
|
Want to read more about the Wulkanowy project? [Click here](https://github.com/wulkanowy/wulkanowy)
|
38
README.md
38
README.md
@ -13,25 +13,29 @@ Aby dostać się do ukrytego panelu:
|
|||||||
2. Przejdź do panelu "Ustawienia"
|
2. Przejdź do panelu "Ustawienia"
|
||||||
3. Przejdź do panelu "O aplikacji"
|
3. Przejdź do panelu "O aplikacji"
|
||||||
4. Kliknij 5 razy w logo aplikacji
|
4. Kliknij 5 razy w logo aplikacji
|
||||||
5. Wróć do ustawień (wymagane będzie odświeżenie widoku, przejdź na ekran główny i wróć do ustawień)
|
5. Przejdź na ekran główny
|
||||||
|
6. Wejdź w ustawienia
|
||||||
|
7. Wejdź w "sekretne ustawienia"
|
||||||
|
|
||||||
# Instalacja
|
# Instalacja
|
||||||
Legenda:
|
|
||||||
|
|
||||||
- `*-fdroid-*` - wersja przystosowana do F-Droid
|
| Nazwa pliku | Przystosowana do |
|
||||||
- `*-hms-*` - wersja przystosowana do Huawei AppGallery
|
| ---------------- | ----------------- |
|
||||||
- `*-play-*` - wersja przystosowana do Play Store
|
| `*-fdroid-*.apk` | F-Droid |
|
||||||
|
| `*-hms-*.apk` | Huawei AppGallery |
|
||||||
|
| `*-play-*.apk` | Sklep Play |
|
||||||
|
|
||||||
- Wersja release (**zalecana dla większości użytkowników**)
|
1. Wersja release (**zalecana dla większości użytkowników**):
|
||||||
|
|
||||||
Pobierz wybraną wersję z [wydań](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
|
||||||
Zalecamy pobranie najnowszej dostępnej wersji.
|
|
||||||
- Wersja debug (dla osób chcących debugować aplikację, a w szczególności żądania do serwera VULCANa)
|
|
||||||
|
|
||||||
Udaj się [tutaj](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
|
||||||
Wejdź na pierwszy wynik od góry, bądź wybierz wersję DEV którą chcesz pobrać.
|
|
||||||
Pobierz wybraną wersję z plików wygenerowanych podczas budowania aplikacji.
|
|
||||||
|
|
||||||
> Chcesz poczytać więcej o projekcie Wulkanowy?
|
Pobierz wybraną wersję z [wydań](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
||||||
>
|
Zalecamy pobranie najnowszej dostępnej wersji.
|
||||||
> [Kliknij tutaj](https://github.com/wulkanowy/wulkanowy)
|
|
||||||
|
2. Wersja debug (dla osób chcących debugować aplikację, a w szczególności żądania do serwera VULCANa):
|
||||||
|
|
||||||
|
Udaj się [tutaj](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
||||||
|
Wejdź na pierwszy wynik od góry, bądź wybierz wersję DEV którą chcesz pobrać.
|
||||||
|
Pobierz wybraną wersję z plików wygenerowanych podczas budowania aplikacji.
|
||||||
|
|
||||||
|
# O projekcie Wulkanowy
|
||||||
|
|
||||||
|
Chcesz poczytać więcej o projekcie Wulkanowy? [Kliknij tutaj](https://github.com/wulkanowy/wulkanowy)
|
48
README.sk.md
48
README.sk.md
@ -8,30 +8,34 @@
|
|||||||
* Skryť komentáre.
|
* Skryť komentáre.
|
||||||
* falošná dochádzka %
|
* falošná dochádzka %
|
||||||
|
|
||||||
Prístup k skrytému panelu:
|
Ak chcete prejsť na skrytý panel:
|
||||||
1. prejdite na kartu "Viac".
|
1. Prejdite na kartu „Viac“.
|
||||||
2. prejdite na panel "Nastavenia".
|
2. Prejdite na panel „Nastavenia“.
|
||||||
3. prejdite na panel "O aplikácii"
|
3. Prejdite na panel „O aplikácii“.
|
||||||
4. 5-krát kliknite na logo aplikácie
|
4. Kliknite 5-krát na logo aplikácie
|
||||||
5. vráťte sa do nastavení (budete musieť obnoviť zobrazenie, prejsť na domovskú obrazovku a vrátiť sa do nastavení)
|
5. Prejdite na domovskú obrazovku
|
||||||
|
6. Prejdite do nastavení
|
||||||
|
7. Zadajte „tajné nastavenia“
|
||||||
|
|
||||||
# Inštalácia
|
# Inštalácia
|
||||||
Legenda:
|
|
||||||
|
|
||||||
- `*-fdroid-*` - verzia prispôsobená pre F-Droid
|
| Názov súboru | Prispôsobené |
|
||||||
- `*-hms-*` - verzia prispôsobená Huawei AppGallery
|
| ---------------- | ----------------- |
|
||||||
- `*-play-*` - verzia prispôsobená Obchodu Play
|
| `*-fdroid-*.apk` | F-Droid |
|
||||||
|
| `*-hms-*.apk` | Huawei AppGallery |
|
||||||
|
| `*-play-*.apk` | Play Store |
|
||||||
|
|
||||||
- Verzia vydania (**odporúčané pre väčšinu používateľov**)
|
1. Verzia vydania (**odporúčané pre väčšinu používateľov**):
|
||||||
|
|
||||||
Stiahnite si vybranú verziu z [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
Stiahnite si vybranú verziu z [releases](https://git.sador.me/sadorowo/wulkanowy-mod/releases).
|
||||||
Odporúčame stiahnuť najnovšiu dostupnú verziu.
|
Odporúčame stiahnuť najnovšiu dostupnú verziu.
|
||||||
- Verzia ladenia (pre ľudí, ktorí chcú ladiť aplikáciu, najmä požiadavky na server VULCAN)
|
|
||||||
|
|
||||||
Choďte [sem](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
|
||||||
Prejdite na prvý výsledok zhora alebo vyberte verziu DEV, ktorú chcete stiahnuť.
|
|
||||||
Stiahnite si vybranú verziu zo súborov vygenerovaných pri zostavovaní aplikácie.
|
|
||||||
|
|
||||||
> Chcete si prečítať viac o projekte Wulkanowy?
|
2. Verzia ladenia (pre ľudí, ktorí chcú ladiť aplikáciu, najmä požiadavky na server VULCAN):
|
||||||
>
|
|
||||||
> [Kliknite sem](https://github.com/wulkanowy/wulkanowy)
|
Choďte [sem](https://git.sador.me/sadorowo/wulkanowy-mod/actions?workflow=build_android_debug.yml).
|
||||||
|
Prejdite na prvý výsledok zhora alebo vyberte verziu DEV, ktorú chcete stiahnuť.
|
||||||
|
Stiahnite si vybranú verziu zo súborov vygenerovaných pri zostavovaní aplikácie.
|
||||||
|
|
||||||
|
# O projekte Wulkanowy
|
||||||
|
|
||||||
|
Chcete si prečítať viac o projekte Wulkanowy? [Kliknite sem](https://github.com/wulkanowy/wulkanowy)
|
@ -27,8 +27,8 @@ android {
|
|||||||
testApplicationId "io.github.tests.wulkanowy"
|
testApplicationId "io.github.tests.wulkanowy"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 34
|
targetSdkVersion 34
|
||||||
versionCode 164
|
versionCode 165
|
||||||
versionName "2.6.4"
|
versionName "2.6.5"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
resValue "string", "app_name", "Wulkanowy"
|
resValue "string", "app_name", "Wulkanowy"
|
||||||
@ -161,7 +161,7 @@ play {
|
|||||||
track = 'production'
|
track = 'production'
|
||||||
releaseStatus = ReleaseStatus.IN_PROGRESS
|
releaseStatus = ReleaseStatus.IN_PROGRESS
|
||||||
userFraction = 0.99d
|
userFraction = 0.99d
|
||||||
updatePriority = 4
|
updatePriority = 3
|
||||||
enabled.set(false)
|
enabled.set(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ ext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'io.github.wulkanowy:sdk:2.6.3'
|
implementation 'io.github.wulkanowy:sdk:2.6.4'
|
||||||
|
|
||||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
|
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ import dagger.Provides
|
|||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
import io.github.wulkanowy.data.api.AdminMessageService
|
import io.github.wulkanowy.data.api.services.SchoolsService
|
||||||
import io.github.wulkanowy.data.api.SchoolsService
|
import io.github.wulkanowy.data.api.services.WulkanowyService
|
||||||
import io.github.wulkanowy.data.db.AppDatabase
|
import io.github.wulkanowy.data.db.AppDatabase
|
||||||
import io.github.wulkanowy.data.db.SharedPrefProvider
|
import io.github.wulkanowy.data.db.SharedPrefProvider
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
@ -71,7 +71,7 @@ internal class DataModule {
|
|||||||
okHttpClient: OkHttpClient,
|
okHttpClient: OkHttpClient,
|
||||||
json: Json,
|
json: Json,
|
||||||
appInfo: AppInfo
|
appInfo: AppInfo
|
||||||
): AdminMessageService = Retrofit.Builder()
|
): WulkanowyService = Retrofit.Builder()
|
||||||
.baseUrl(appInfo.messagesBaseUrl)
|
.baseUrl(appInfo.messagesBaseUrl)
|
||||||
.client(okHttpClient)
|
.client(okHttpClient)
|
||||||
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
|
.addConverterFactory(json.asConverterFactory("application/json".toMediaType()))
|
||||||
|
@ -5,6 +5,7 @@ import io.github.wulkanowy.data.db.dao.StudentDao
|
|||||||
import io.github.wulkanowy.data.db.entities.Semester
|
import io.github.wulkanowy.data.db.entities.Semester
|
||||||
import io.github.wulkanowy.data.db.entities.Student
|
import io.github.wulkanowy.data.db.entities.Student
|
||||||
import io.github.wulkanowy.data.db.entities.StudentIsEduOne
|
import io.github.wulkanowy.data.db.entities.StudentIsEduOne
|
||||||
|
import io.github.wulkanowy.data.repositories.WulkanowyRepository
|
||||||
import io.github.wulkanowy.sdk.Sdk
|
import io.github.wulkanowy.sdk.Sdk
|
||||||
import io.github.wulkanowy.utils.RemoteConfigHelper
|
import io.github.wulkanowy.utils.RemoteConfigHelper
|
||||||
import io.github.wulkanowy.utils.WebkitCookieManagerProxy
|
import io.github.wulkanowy.utils.WebkitCookieManagerProxy
|
||||||
@ -20,6 +21,7 @@ class WulkanowySdkFactory @Inject constructor(
|
|||||||
private val remoteConfig: RemoteConfigHelper,
|
private val remoteConfig: RemoteConfigHelper,
|
||||||
private val webkitCookieManagerProxy: WebkitCookieManagerProxy,
|
private val webkitCookieManagerProxy: WebkitCookieManagerProxy,
|
||||||
private val studentDb: StudentDao,
|
private val studentDb: StudentDao,
|
||||||
|
private val wulkanowyRepository: WulkanowyRepository,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val eduOneMutex = Mutex()
|
private val eduOneMutex = Mutex()
|
||||||
@ -36,14 +38,29 @@ class WulkanowySdkFactory @Inject constructor(
|
|||||||
addInterceptor(chuckerInterceptor, network = true)
|
addInterceptor(chuckerInterceptor, network = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun create() = sdk
|
fun createBase() = sdk
|
||||||
|
|
||||||
|
suspend fun create(): Sdk {
|
||||||
|
val mapping = wulkanowyRepository.getMapping()
|
||||||
|
|
||||||
|
return createBase().apply {
|
||||||
|
if (mapping != null) {
|
||||||
|
endpointsMapping = mapping.endpoints
|
||||||
|
vTokenMapping = mapping.vTokens
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun create(student: Student, semester: Semester? = null): Sdk {
|
suspend fun create(student: Student, semester: Semester? = null): Sdk {
|
||||||
val overrideIsEduOne = checkEduOneAndMigrateIfNecessary(student)
|
val overrideIsEduOne = checkEduOneAndMigrateIfNecessary(student)
|
||||||
return buildSdk(student, semester, overrideIsEduOne)
|
return buildSdk(student, semester, overrideIsEduOne)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildSdk(student: Student, semester: Semester?, isStudentEduOne: Boolean): Sdk {
|
private suspend fun buildSdk(
|
||||||
|
student: Student,
|
||||||
|
semester: Semester?,
|
||||||
|
isStudentEduOne: Boolean
|
||||||
|
): Sdk {
|
||||||
return create().apply {
|
return create().apply {
|
||||||
email = student.email
|
email = student.email
|
||||||
password = student.password
|
password = student.password
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
package io.github.wulkanowy.data.api.models
|
||||||
|
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class Mapping(
|
||||||
|
|
||||||
|
@SerialName("endpoints")
|
||||||
|
val endpoints: Map<String, Map<String, Map<String, String>>>,
|
||||||
|
|
||||||
|
@SerialName("vTokens")
|
||||||
|
val vTokens: Map<String, Map<String, Map<String, String>>>,
|
||||||
|
)
|
@ -1,4 +1,4 @@
|
|||||||
package io.github.wulkanowy.data.api
|
package io.github.wulkanowy.data.api.services
|
||||||
|
|
||||||
import io.github.wulkanowy.data.pojos.IntegrityRequest
|
import io.github.wulkanowy.data.pojos.IntegrityRequest
|
||||||
import io.github.wulkanowy.data.pojos.LoginEvent
|
import io.github.wulkanowy.data.pojos.LoginEvent
|
@ -1,12 +1,16 @@
|
|||||||
package io.github.wulkanowy.data.api
|
package io.github.wulkanowy.data.api.services
|
||||||
|
|
||||||
|
import io.github.wulkanowy.data.api.models.Mapping
|
||||||
import io.github.wulkanowy.data.db.entities.AdminMessage
|
import io.github.wulkanowy.data.db.entities.AdminMessage
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
interface AdminMessageService {
|
interface WulkanowyService {
|
||||||
|
|
||||||
@GET("/v1.json")
|
@GET("/v1.json")
|
||||||
suspend fun getAdminMessages(): List<AdminMessage>
|
suspend fun getAdminMessages(): List<AdminMessage>
|
||||||
}
|
|
||||||
|
@GET("/mapping1.json")
|
||||||
|
suspend fun getMapping(): Mapping
|
||||||
|
}
|
@ -10,6 +10,7 @@ import com.fredporciuncula.flow.preferences.Serializer
|
|||||||
import com.fredporciuncula.flow.preferences.map
|
import com.fredporciuncula.flow.preferences.map
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import io.github.wulkanowy.R
|
import io.github.wulkanowy.R
|
||||||
|
import io.github.wulkanowy.data.api.models.Mapping
|
||||||
import io.github.wulkanowy.data.enums.AppTheme
|
import io.github.wulkanowy.data.enums.AppTheme
|
||||||
import io.github.wulkanowy.data.enums.AttendanceCalculatorSortingMode
|
import io.github.wulkanowy.data.enums.AttendanceCalculatorSortingMode
|
||||||
import io.github.wulkanowy.data.enums.GradeColorTheme
|
import io.github.wulkanowy.data.enums.GradeColorTheme
|
||||||
@ -445,6 +446,15 @@ class PreferencesRepository @Inject constructor(
|
|||||||
get() = sharedPref.getString(PREF_KEY_INSTALLATION_ID, null).orEmpty()
|
get() = sharedPref.getString(PREF_KEY_INSTALLATION_ID, null).orEmpty()
|
||||||
private set(value) = sharedPref.edit { putString(PREF_KEY_INSTALLATION_ID, value) }
|
private set(value) = sharedPref.edit { putString(PREF_KEY_INSTALLATION_ID, value) }
|
||||||
|
|
||||||
|
var mapping: Mapping?
|
||||||
|
get() {
|
||||||
|
val value = sharedPref.getString("mapping", null)
|
||||||
|
return value?.let { json.decodeFromString(it) }
|
||||||
|
}
|
||||||
|
set(value) = sharedPref.edit(commit = true) {
|
||||||
|
putString("mapping", value?.let { json.encodeToString(it) })
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (installationId.isEmpty()) {
|
if (installationId.isEmpty()) {
|
||||||
installationId = UUID.randomUUID().toString()
|
installationId = UUID.randomUUID().toString()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package io.github.wulkanowy.data.repositories
|
package io.github.wulkanowy.data.repositories
|
||||||
|
|
||||||
import io.github.wulkanowy.data.WulkanowySdkFactory
|
import io.github.wulkanowy.data.WulkanowySdkFactory
|
||||||
import io.github.wulkanowy.data.api.SchoolsService
|
import io.github.wulkanowy.data.api.services.SchoolsService
|
||||||
import io.github.wulkanowy.data.db.entities.Semester
|
import io.github.wulkanowy.data.db.entities.Semester
|
||||||
import io.github.wulkanowy.data.db.entities.Student
|
import io.github.wulkanowy.data.db.entities.Student
|
||||||
import io.github.wulkanowy.data.db.entities.StudentWithSemesters
|
import io.github.wulkanowy.data.db.entities.StudentWithSemesters
|
||||||
|
@ -1,20 +1,23 @@
|
|||||||
package io.github.wulkanowy.data.repositories
|
package io.github.wulkanowy.data.repositories
|
||||||
|
|
||||||
import io.github.wulkanowy.data.Resource
|
import io.github.wulkanowy.data.Resource
|
||||||
import io.github.wulkanowy.data.api.AdminMessageService
|
import io.github.wulkanowy.data.api.models.Mapping
|
||||||
|
import io.github.wulkanowy.data.api.services.WulkanowyService
|
||||||
import io.github.wulkanowy.data.db.dao.AdminMessageDao
|
import io.github.wulkanowy.data.db.dao.AdminMessageDao
|
||||||
import io.github.wulkanowy.data.db.entities.AdminMessage
|
import io.github.wulkanowy.data.db.entities.AdminMessage
|
||||||
import io.github.wulkanowy.data.networkBoundResource
|
import io.github.wulkanowy.data.networkBoundResource
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.filterNot
|
import kotlinx.coroutines.flow.filterNot
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class AdminMessageRepository @Inject constructor(
|
class WulkanowyRepository @Inject constructor(
|
||||||
private val adminMessageService: AdminMessageService,
|
private val wulkanowyService: WulkanowyService,
|
||||||
private val adminMessageDao: AdminMessageDao,
|
private val adminMessageDao: AdminMessageDao,
|
||||||
|
private val preferencesRepository: PreferencesRepository,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val saveFetchResultMutex = Mutex()
|
private val saveFetchResultMutex = Mutex()
|
||||||
@ -24,11 +27,28 @@ class AdminMessageRepository @Inject constructor(
|
|||||||
mutex = saveFetchResultMutex,
|
mutex = saveFetchResultMutex,
|
||||||
isResultEmpty = { false },
|
isResultEmpty = { false },
|
||||||
query = { adminMessageDao.loadAll() },
|
query = { adminMessageDao.loadAll() },
|
||||||
fetch = { adminMessageService.getAdminMessages() },
|
fetch = { wulkanowyService.getAdminMessages() },
|
||||||
shouldFetch = { true },
|
shouldFetch = { true },
|
||||||
saveFetchResult = { oldItems, newItems ->
|
saveFetchResult = { oldItems, newItems ->
|
||||||
adminMessageDao.removeOldAndSaveNew(oldItems, newItems)
|
adminMessageDao.removeOldAndSaveNew(oldItems, newItems)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.filterNot { it is Resource.Intermediate }
|
.filterNot { it is Resource.Intermediate }
|
||||||
|
|
||||||
|
suspend fun getMapping(): Mapping? {
|
||||||
|
var savedMapping = preferencesRepository.mapping
|
||||||
|
|
||||||
|
if (savedMapping == null) {
|
||||||
|
fetchMapping()
|
||||||
|
savedMapping = preferencesRepository.mapping
|
||||||
|
}
|
||||||
|
|
||||||
|
return savedMapping
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun fetchMapping() {
|
||||||
|
runCatching { wulkanowyService.getMapping() }
|
||||||
|
.onFailure { Timber.e(it) }
|
||||||
|
.onSuccess { preferencesRepository.mapping = it }
|
||||||
|
}
|
||||||
}
|
}
|
@ -5,14 +5,14 @@ import io.github.wulkanowy.data.db.entities.AdminMessage
|
|||||||
import io.github.wulkanowy.data.db.entities.Student
|
import io.github.wulkanowy.data.db.entities.Student
|
||||||
import io.github.wulkanowy.data.enums.MessageType
|
import io.github.wulkanowy.data.enums.MessageType
|
||||||
import io.github.wulkanowy.data.mapResourceData
|
import io.github.wulkanowy.data.mapResourceData
|
||||||
import io.github.wulkanowy.data.repositories.AdminMessageRepository
|
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
|
import io.github.wulkanowy.data.repositories.WulkanowyRepository
|
||||||
import io.github.wulkanowy.utils.AppInfo
|
import io.github.wulkanowy.utils.AppInfo
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class GetAppropriateAdminMessageUseCase @Inject constructor(
|
class GetAppropriateAdminMessageUseCase @Inject constructor(
|
||||||
private val adminMessageRepository: AdminMessageRepository,
|
private val wulkanowyRepository: WulkanowyRepository,
|
||||||
private val preferencesRepository: PreferencesRepository,
|
private val preferencesRepository: PreferencesRepository,
|
||||||
private val appInfo: AppInfo
|
private val appInfo: AppInfo
|
||||||
) {
|
) {
|
||||||
@ -22,7 +22,7 @@ class GetAppropriateAdminMessageUseCase @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
operator fun invoke(scrapperBaseUrl: String, type: MessageType): Flow<Resource<AdminMessage?>> {
|
operator fun invoke(scrapperBaseUrl: String, type: MessageType): Flow<Resource<AdminMessage?>> {
|
||||||
return adminMessageRepository.getAdminMessages().mapResourceData { adminMessages ->
|
return wulkanowyRepository.getAdminMessages().mapResourceData { adminMessages ->
|
||||||
adminMessages
|
adminMessages
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.filter { it.isNotDismissed() }
|
.filter { it.isNotDismissed() }
|
||||||
|
@ -59,7 +59,7 @@ class CaptchaDialog : BaseDialogFragment<DialogCaptchaBinding>() {
|
|||||||
webView = this
|
webView = this
|
||||||
with(settings) {
|
with(settings) {
|
||||||
javaScriptEnabled = true
|
javaScriptEnabled = true
|
||||||
userAgentString = wulkanowySdkFactory.create().userAgent
|
userAgentString = wulkanowySdkFactory.createBase().userAgent
|
||||||
}
|
}
|
||||||
|
|
||||||
webViewClient = object : WebViewClient() {
|
webViewClient = object : WebViewClient() {
|
||||||
|
@ -118,5 +118,6 @@ class LoginActivity : BaseActivity<LoginPresenter, ActivityLoginBinding>(), Logi
|
|||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
inAppUpdateHelper.onResume()
|
inAppUpdateHelper.onResume()
|
||||||
|
presenter.updateSdkMappings()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package io.github.wulkanowy.ui.modules.login
|
package io.github.wulkanowy.ui.modules.login
|
||||||
|
|
||||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
import io.github.wulkanowy.data.repositories.StudentRepository
|
||||||
|
import io.github.wulkanowy.data.repositories.WulkanowyRepository
|
||||||
import io.github.wulkanowy.ui.base.BasePresenter
|
import io.github.wulkanowy.ui.base.BasePresenter
|
||||||
import io.github.wulkanowy.ui.base.ErrorHandler
|
import io.github.wulkanowy.ui.base.ErrorHandler
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class LoginPresenter @Inject constructor(
|
class LoginPresenter @Inject constructor(
|
||||||
|
private val wulkanowyRepository: WulkanowyRepository,
|
||||||
errorHandler: ErrorHandler,
|
errorHandler: ErrorHandler,
|
||||||
studentRepository: StudentRepository
|
studentRepository: StudentRepository
|
||||||
) : BasePresenter<LoginView>(errorHandler, studentRepository) {
|
) : BasePresenter<LoginView>(errorHandler, studentRepository) {
|
||||||
@ -16,4 +19,11 @@ class LoginPresenter @Inject constructor(
|
|||||||
view.initView()
|
view.initView()
|
||||||
Timber.i("Login view was initialized")
|
Timber.i("Login view was initialized")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateSdkMappings() {
|
||||||
|
presenterScope.launch {
|
||||||
|
runCatching { wulkanowyRepository.fetchMapping() }
|
||||||
|
.onFailure { Timber.e(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,6 +138,7 @@ class MainActivity : BaseActivity<MainPresenter, ActivityMainBinding>(), MainVie
|
|||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
inAppUpdateHelper.onResume()
|
inAppUpdateHelper.onResume()
|
||||||
|
presenter.updateSdkMappings()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
|
@ -6,6 +6,7 @@ import io.github.wulkanowy.data.onResourceError
|
|||||||
import io.github.wulkanowy.data.onResourceSuccess
|
import io.github.wulkanowy.data.onResourceSuccess
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
import io.github.wulkanowy.data.repositories.StudentRepository
|
||||||
|
import io.github.wulkanowy.data.repositories.WulkanowyRepository
|
||||||
import io.github.wulkanowy.data.resourceFlow
|
import io.github.wulkanowy.data.resourceFlow
|
||||||
import io.github.wulkanowy.services.sync.SyncManager
|
import io.github.wulkanowy.services.sync.SyncManager
|
||||||
import io.github.wulkanowy.ui.base.BasePresenter
|
import io.github.wulkanowy.ui.base.BasePresenter
|
||||||
@ -29,6 +30,7 @@ class MainPresenter @Inject constructor(
|
|||||||
errorHandler: ErrorHandler,
|
errorHandler: ErrorHandler,
|
||||||
studentRepository: StudentRepository,
|
studentRepository: StudentRepository,
|
||||||
private val preferencesRepository: PreferencesRepository,
|
private val preferencesRepository: PreferencesRepository,
|
||||||
|
private val wulkanowyRepository: WulkanowyRepository,
|
||||||
private val syncManager: SyncManager,
|
private val syncManager: SyncManager,
|
||||||
private val analytics: AnalyticsHelper,
|
private val analytics: AnalyticsHelper,
|
||||||
private val json: Json,
|
private val json: Json,
|
||||||
@ -199,4 +201,11 @@ class MainPresenter @Inject constructor(
|
|||||||
.onFailure { errorHandler.dispatch(it) }
|
.onFailure { errorHandler.dispatch(it) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateSdkMappings() {
|
||||||
|
presenterScope.launch {
|
||||||
|
runCatching { wulkanowyRepository.fetchMapping() }
|
||||||
|
.onFailure { Timber.e(it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Wersja 2.6.4
|
Wersja 2.6.5
|
||||||
|
|
||||||
— naprawiliśmy dostęp do modułu ucznia i modułu wiadomości po kolejnej próbie blokady nas (niestety jeszcze bez nowego modułu ucznia)
|
— naprawiliśmy pozostałe bieżące problemy spowodowane ostatnimi blokadami Wulkanowego przez wiadomo kogo
|
||||||
|
|
||||||
Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases
|
Pełna lista zmian: https://github.com/wulkanowy/wulkanowy/releases
|
||||||
|
@ -8,6 +8,7 @@ import io.mockk.mockk
|
|||||||
|
|
||||||
fun createWulkanowySdkFactoryMock(sdk: Sdk) = mockk<WulkanowySdkFactory>()
|
fun createWulkanowySdkFactoryMock(sdk: Sdk) = mockk<WulkanowySdkFactory>()
|
||||||
.apply {
|
.apply {
|
||||||
every { create() } returns sdk
|
every { createBase() } returns sdk
|
||||||
|
coEvery { create() } returns sdk
|
||||||
coEvery { create(any(), any()) } returns sdk
|
coEvery { create(any(), any()) } returns sdk
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@ import io.github.wulkanowy.sdk.pojo.RegisterStudent
|
|||||||
import io.mockk.Runs
|
import io.mockk.Runs
|
||||||
import io.mockk.coEvery
|
import io.mockk.coEvery
|
||||||
import io.mockk.coVerify
|
import io.mockk.coVerify
|
||||||
import io.mockk.every
|
|
||||||
import io.mockk.just
|
import io.mockk.just
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import io.mockk.spyk
|
import io.mockk.spyk
|
||||||
@ -40,11 +39,12 @@ class WulkanowySdkFactoryTest {
|
|||||||
chuckerInterceptor = mockk(),
|
chuckerInterceptor = mockk(),
|
||||||
remoteConfig = mockk(relaxed = true),
|
remoteConfig = mockk(relaxed = true),
|
||||||
webkitCookieManagerProxy = mockk(),
|
webkitCookieManagerProxy = mockk(),
|
||||||
studentDb = studentDao
|
studentDb = studentDao,
|
||||||
|
wulkanowyRepository = mockk(relaxed = true),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
every { wulkanowySdkFactory.create() } returns sdk
|
coEvery { wulkanowySdkFactory.create() } returns sdk
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -3,6 +3,7 @@ package io.github.wulkanowy.ui.modules.main
|
|||||||
import io.github.wulkanowy.MainCoroutineRule
|
import io.github.wulkanowy.MainCoroutineRule
|
||||||
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
import io.github.wulkanowy.data.repositories.PreferencesRepository
|
||||||
import io.github.wulkanowy.data.repositories.StudentRepository
|
import io.github.wulkanowy.data.repositories.StudentRepository
|
||||||
|
import io.github.wulkanowy.data.repositories.WulkanowyRepository
|
||||||
import io.github.wulkanowy.services.sync.SyncManager
|
import io.github.wulkanowy.services.sync.SyncManager
|
||||||
import io.github.wulkanowy.ui.base.ErrorHandler
|
import io.github.wulkanowy.ui.base.ErrorHandler
|
||||||
import io.github.wulkanowy.utils.AdsHelper
|
import io.github.wulkanowy.utils.AdsHelper
|
||||||
@ -31,6 +32,9 @@ class MainPresenterTest {
|
|||||||
@MockK
|
@MockK
|
||||||
lateinit var studentRepository: StudentRepository
|
lateinit var studentRepository: StudentRepository
|
||||||
|
|
||||||
|
@MockK(relaxed = true)
|
||||||
|
lateinit var wulkanowyRepository: WulkanowyRepository
|
||||||
|
|
||||||
@MockK(relaxed = true)
|
@MockK(relaxed = true)
|
||||||
lateinit var prefRepository: PreferencesRepository
|
lateinit var prefRepository: PreferencesRepository
|
||||||
|
|
||||||
@ -65,7 +69,8 @@ class MainPresenterTest {
|
|||||||
analytics = analytics,
|
analytics = analytics,
|
||||||
json = Json,
|
json = Json,
|
||||||
appInfo = appInfo,
|
appInfo = appInfo,
|
||||||
adsHelper = adsHelper
|
adsHelper = adsHelper,
|
||||||
|
wulkanowyRepository = wulkanowyRepository
|
||||||
)
|
)
|
||||||
presenter.onAttachView(mainView, null)
|
presenter.onAttachView(mainView, null)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user