lolocomotive / klient Goto Github PK
View Code? Open in Web Editor NEWUnofficial flutter client for the Skolengo / Kosmos / K-d'école education management system (ENT)
License: GNU General Public License v3.0
Unofficial flutter client for the Skolengo / Kosmos / K-d'école education management system (ENT)
License: GNU General Public License v3.0
When pronote isn't activated, more info is available. Find a way to display it.
The homework from Mon Ent Occitanie doesn't show after 1 or 2 weeks of use of the app
Even when I tried to actualize it didn't trove a single homework
Everything in lib/api can be deleted.
The new API wrapper has types and functions to download everything.
If I remove the database, it's gonna be difficult to search through the messages so this feature may have to go away unfortunately... (still thinking of a solution but not sure).
I'm also not gonna download all messages (maybe give an option to do it?).
The new API makes it possible to view folders in the messages tab
Since the API drastically changes, this has to be rewritten almost entirely.
Either take the Skolengo-provided color (meh) or use the subject ID with the existing ColorProvider
The app should use android Monet functionality to use the system's color scheme
Hey,
After reviewing all the codebase I found that there isn't any permission support yet, thus means that by example if I don't have the permission to see my schedule all (you can retrieve all permissions per schools just by using the infoutilisateur endpoint). I think that I will also address this issue in my fork.
The app misalign the courses after switching from normal to compact and vice versa
The API klient is currently used has been replaced with a new one. The new API wrapper is already written but it needs to be integrated in the app.
Migrating to scolengo-api will require fundamental changes in the app structure.
This is the biggest target for V2.
The issues are roughly in the order I plan to implement them in.
Bonjour est-ce que c'est possible d'avoir un fichier APK de cette application svp ?
Hi,
The libsqlite3.so (which is dynamic library) file isn't in the "lib" folder in the tar archive so the app can't be ran on new Linux machines (I have sqlite3 installed). I am on Fedora 38. Here are the logs of the application:
flutter: Reading preferences
flutter: SqfliteFfiException(error, Invalid argument(s): Failed to load dynamic library 'libsqlite3.so': libsqlite3.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type}) DatabaseException(Invalid argument(s): Failed to load dynamic library 'libsqlite3.so': libsqlite3.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type)
flutter: #0 responseToResultOrThrow (package:sqflite_common_ffi/src/method_call.dart:123)
#1 SqfliteIsolate.handle (package:sqflite_common_ffi/src/isolate.dart:33)
<asynchronous suspension>
#2 _isolateHandle (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:95)
<asynchronous suspension>
#3 ffiMethodCallhandleInIsolate (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:50)
<asynchronous suspension>
#4 _SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite_common/src/mixin/factory.dart:22)
<asynchronous suspension>
#5 SqfliteDatabaseMixin.openDatabase (package:sqflite_common/src/database_mixin.dart:777)
<asynchronous suspension>
#6 SqfliteDatabaseMixin.doOpen (package:sqflite_common/src/database_mixin.dart:879)
<asynchronous suspension>
#7 SqfliteDatabaseOpenHelper.openDatabase (package:sqflite_common/src/database.dart:46)
<asynchronous suspension>
#8 SqfliteDatabaseFactoryMixin.openDatabase.<anonymous closure> (package:sqflite_common/src/factory_mixin.dart:110)
<asynchronous suspension>
#9 ReentrantLock.synchronized.<anonymous closure> (package:synchronized/src/reentrant_lock.dart:37)
<asynchronous suspension>
#10 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:33)
<asynchronous suspension>
#11 DatabaseProvider.openDB (package:klient/database_provider.dart:256)
<asynchronous suspension>
#12 DatabaseProvider.initDB (package:klient/database_provider.dart:67)
<asynchronous suspension>
#13 DatabaseProvider.getDB (package:klient/database_provider.dart:42)
<asynchronous suspension>
#14 Student.fetchAll (package:klient/api/student.dart:35)
<asynchronous suspension>
#15 Client.getCurrentlySelected (package:klient/api/client.dart:131)
<asynchronous suspension>
#16 main (package:klient/main.dart:37)
<asynchronous suspension>
flutter: Deleting database
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SqfliteFfiException(error, Invalid argument(s): Failed to load dynamic library 'libsqlite3.so': libsqlite3.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type}) DatabaseException(Invalid argument(s): Failed to load dynamic library 'libsqlite3.so': libsqlite3.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type)
#0 responseToResultOrThrow (package:sqflite_common_ffi/src/method_call.dart:123)
#1 SqfliteIsolate.handle (package:sqflite_common_ffi/src/isolate.dart:33)
<asynchronous suspension>
#2 _isolateHandle (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:95)
<asynchronous suspension>
#3 ffiMethodCallhandleInIsolate (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:50)
<asynchronous suspension>
#4 _SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite_common/src/mixin/factory.dart:22)
<asynchronous suspension>
#5 SqfliteDatabaseMixin.openDatabase (package:sqflite_common/src/database_mixin.dart:777)
<asynchronous suspension>
#6 SqfliteDatabaseMixin.doOpen (package:sqflite_common/src/database_mixin.dart:879)
<asynchronous suspension>
#7 SqfliteDatabaseOpenHelper.openDatabase (package:sqflite_common/src/database.dart:46)
<asynchronous suspension>
#8 SqfliteDatabaseFactoryMixin.openDatabase.<anonymous closure> (package:sqflite_common/src/factory_mixin.dart:110)
<asynchronous suspension>
#9 ReentrantLock.synchronized.<anonymous closure> (package:synchronized/src/reentrant_lock.dart:37)
<asynchronous suspension>
#10 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:33)
<asynchronous suspension>
#11 DatabaseProvider.openDB (package:klient/database_provider.dart:256)
<asynchronous suspension>
#12 DatabaseProvider.initDB (package:klient/database_provider.dart:74)
<asynchronous suspension>
#13 DatabaseProvider.getDB (package:klient/database_provider.dart:42)
<asynchronous suspension>
#14 Student.fetchAll (package:klient/api/student.dart:35)
<asynchronous suspension>
#15 Client.getCurrentlySelected (package:klient/api/client.dart:131)
<asynchronous suspension>
#16 main (package:klient/main.dart:37)
<asynchronous suspension>
Hello tout le monde.
Je sais pas si c'est normal mais au vu des screenshots dans le README non.
Je n'ai pas de messages qui s'affichent, quand je clique sur l'onglet Messagerie ça charge indéfiniement sans possibilité de voir un seul message.
Je sais pas comment résoudre ça ni même à quoi c'est dû
Des idées ?
Demo mode is mandatory for the play store, so I can't remove it entirely.
The new API allows this key feature.
Hello,
After testing the app on my android phone (in debug mode) I encountered an error on the Initial Setup page on the third step:
I/flutter (27833): Instance of 'NetworkException403'
I/flutter (27833): #0 Client.default403Handler (package:kosmos_client/api/client.dart:150:5)
I/flutter (27833): #1 Client.request (package:kosmos_client/api/client.dart:279:9)
I/flutter (27833): <asynchronous suspension>
I/flutter (27833): #2 DatabaseManager.fetchGradesData (package:kosmos_client/api/database_manager.dart:202:24)
I/flutter (27833): <asynchronous suspension>
I/flutter (27833): #3 DatabaseManager.downloadAll (package:kosmos_client/api/database_manager.dart:62:7)
I/flutter (27833): <asynchronous suspension>
And after some debug I found that the requested URL was {{endpoint}}/consulterNotes/idetablissement/0/
which is of course a wrong URL, next we can look at the stacktrace and find that the request have been sent from the method fetchGradesData, and here we can find the code that caused this error:
final result = await Global.client!
.request(Action.getGrades, params: [Global.client!.idEtablissement ?? '0']);
So the error is just that Global.client!.idEtablissement
is null (I used a student account for testing). So I think that this problem can be solved just by doing a request to fetch the infoUtilisateur
before this request.
They're annoying.
The database solution works fine right now but the new API would require a rewrite of the entire database structure and two separate parsing and serialization methods for each object (at least that's how I see it).
I think that from now on I'll just directly cache the request responses in json files (or in database entries depending on which is faster/mor practical), which will make it easier to handle.
Hello,
I'm confused about the method used to check if the SSL certificate is valid.
With this code, a self-signed certificate (not certified by a certification authority) could pass without problem and can endanger the security of communication with Skolengo APIs. This makes your app vulnerable to man-in-the-middle attacks.
If a specific certificate expiration error is returned by the http client, I recommend testing if the certificate is recognized as expired instead. This will at least ensure that it has been signed by a CA even if it's expired...
Commit: 5bfcd7e
Best regards
Currently, if you attempt to build the project it looks for a .git/ORIG_HEAD
file which is not present unless you do some git hackery.
Since the information given by this is not really important, it could be removed.
It would also be better if this caused a runtime and not compile time error.
Fixing this would also make CI builds easier/possible.
Hey,
There is an error in the french translate:
At the start of the app, when the app download data, it is translated "Téléchergement".
The new API allows this.
Authentication with the new API is done with a school selection screen
The new authentication works with OpenID instead of with a username and activation code
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.