redstonemedia / hag-timetable-app Goto Github PK
View Code? Open in Web Editor NEWThis is a timetable app for a specific school in Germany.
License: GNU General Public License v3.0
This is a timetable app for a specific school in Germany.
License: GNU General Public License v3.0
Allow the user to download updates for the app and install them, rather than just sending them to the downloads page.
The installation can be handled by the App Installer package
This will make it easier for users to update the App and will encourage some people who are still on old versions to update.
Automated Tests for the App.
Helpful for finding bugs.
I created a design for an intro screen, which would be displayed the first time you open the app:
@RedstoneMedia is there anything you would change?
Describe the bug and what you did in the app when the bug happened
The App displays that, the lesson is not taking place, however the substitution table, shows that there is a substitution taking place in the same hour, with no set replacement.
Expected behaviour
The App should display that, the lesson is substituted.
Screenshots
Smartphone:
Describe the bug and what you did in the app when the bug happened
The app does not display previous substitutions of the current week (#6), if connected to the internet.
Expected behaviour
The app should always display the previous subsitutions of the week.
Smartphone:
Add a release flavor, that does not include the huge gogle_ml_kit dependency.
This will require the use of a custom build tool or a separate branch, as flutter does not currently provide the ability to swap out the pubspec.yaml
at compile time (flutter/flutter#46979).
Some people might not want to use the automatic course scan feature, or might think that the additional ~50 MB are not worth it.
Some potential users might be on a limited data plan. This makes the option to get the app without expending so much bandwidth valid.
Describe the bug and what you did in the app when the bug happened
The IServ substitutions table layout has changed, this causes unexpected substitutions to be shown or the substitution not being parsed at all.
Expected behaviour
The new tables get parsed correctly
Additional context
The previous table headers:
Stunde
Fach
Vertretung
Raum
statt Fach
statt Lehrer
statt Raum
Text
Entfall
Don't put everting in main !! ๐ฝ
Zats stupit ๐คช.
Describe the bug and what you did in the app when the bug happened
I opened the app and it never finished loading
Expected behaviour
It loads and displays the timetable
Smartphone:
Describe the bug and what you did in the app when the bug happened
The app completely freezes while the app is loading the timetable, substitution and calendar data. This is only true in the newer versions of the App even though there were no modifications in the loading code (maybe some dependency changed)
Expected behaviour
The app should not freeze, especially when reloading.
This error should not happen, since all the loading is done in asyncInit
which is not awaited and should thus also not freeze the app (but it does).
Smartphone:
Visually indicating holidays (Only German holidays).
The normal substitutions should still apply, since the holiday calendar data might not always be correct.
It's useful to know if you might not have school in advance, because substitutions only apply for the next day.
Describe the bug and what you did in the app when the bug happened
I opened the app, and it didn't load the timetable.
Expected behaviour
It should load the timetable.
Smartphone:
Additional context
[ERROR:flutter/lib/ui/ui_dart_state.cc(184)] Unhandled Exception: FormatException: Invalid UTF-8 byte (at offset 12789) fillTimeTable (package:stundenplan/parsing/parse_timetable.dart:22:35)
@RedstoneMedia
Please don't forget to add a severity label (Low, Medium or High)
โ
Describe the bug and what you did in the app when the bug happened
Sometimes notifications are repeated multiple times (sometimes you will get one every time the background services fetches data, even if there is nothing new)
Expected behaviour
Notifications should only appear one time and only if something changes (substitutions)
Smartphone:
Describe the bug and what you did in the app when the bug happened
In the intro screen the course select list items are not selectable (The keyboard opens, but then closes fast again).
If however another text input was touched on the current screen before, everything you type will go into the previous text field and not into the one you clicked on.
This probably means that the text controllers of the list are all pointing to the last active text controller.
However, this makes no sense and I can't see why it works in the setup page when the arguments to the widget are exactly the same.
This means that we could have a serious memory issue, that will be very hard to fix.
Expected behaviour
The courses in the course select list should be editable and not have such a weird behaviour.
Smartphone:
Highlight the current hour that falls into the start and end time, like it is done WeekdayGridObject.
We display the current day but not the current hour that is not ideal.
Also @GreenOpposite needs to do something and my brain is to stupid to deal with the date math in dart (that last part might be the real reason I created this issue).
A snapshot button, which when clicked saves the current subsiution and time table to disk.
(For debug builds)
This feature would allow better debuging of the app. Since without it substiution related bugs have to be resolved, while the substiution is still active, since they are only temporary.
Add a Wiki to this GitHub Repo
This should include:
Before considering writing a wiki entry on the settings page, it should be considered to implement #15 first.
It's important, to help a user, if they get confused or want to do something specific, but don't know how.
It also serves as a feature list
Add local push notification that notify the user, if their personal timetable has been changed.
This could be done by creating a PeriodicWorkRequest
that checks the timetable every couple of minutes (15)
and then checks if there are any relevant changes. This can be done with the https://pub.dev/packages/workmanager lib
If yes the background service can create a local notification.
It is useful to get notified when your timetable changes, because this means that the user does not have to frequently check the app every couple of minutes or hours to see if there are any changes.
Describe the bug and what you did in the app when the bug happened
The Timetable parsing fails.
Expected behaviour
It shouldn't.
Screenshots
no.
Smartphone:
Additional context
The website probably changed. There is no "Nr."
in headerColumnStringIndexMap; [parse_timetable.dart:116]
causing the length to be null.
Please don't forget to add a severity label (Low, Medium or High)
โ
Describe the bug and what you did in the app when the bug happened
Select a Profile, in a different grade, which happens to have a subject, that also exists in the grade, of the IServ login user. This subject must then have a substitution in the Schulmanger.
This causes the substitution from the IServ login user grade to appear in a complete different grade, because the subject names are the same in both profiles.
Expected behavior
No substitution shows up from the Schulmanger in another grades profile.
Add course auto completion, when adding new courses or editing them in the course list.
Adding course auto completion would help new users to set up their courses, when they don't know the exact names that their courses have.
Display the new substitution kind ("Art") in the substitution detail view, if the cell is not dropped.
One could also display the "(Le.) nach" value, if one figures out what the abbreviation is supposed to mean. It has to be noted that this value should only be displayed, if it is not the same as the substitution kind value (which it often is).
A new update on the Units substitution table on IServ now includes a Text value for the substitution kind, instead of a boolean: isDropped
.
This could be valuable information to the user and should thus be displayed.
Describe the bug
When inputting courses into the course that exist, the app does not display them in the list, when the case of the name is of.
This is especially annoying as there is apparently no consistency in the capitalization, some course names are fully uppercase others are fully lowercase and some only capitalize the first letter. This makes it way to hard for the user to input their course.
Expected behaviour
The course names should not be case-sensitive. That also holds true for the course auto completion, which is also case-sensitive, but shouldn't be.
Smartphone:
Screenshots
Naming inconsistency also exists in the timetable itself (CH1 and ch1) :
Additional context
We wouldn't have this problem if the school would be a little more consistent, but this basically goes for the entire schools online infrastructure and this app only exist because of the frustrations with the current system. It is sad that students need to make an app for something as important as a timetable, because the school is unable to implement something proper. But oh well ๐คท
Displaying information for a day (Maybe a modal when clicking on the day header).
This data can be grabbed from IServ at https://{iserv_domain}/caldav/{username}/home/
There is already dart package to communicate with a caldav server : https://pub.dev/packages/caldav_client
This should be an optional feature, since the user would have to put in their IServ username and password.
Which also means that we should probaly not store this information like we store normal data, but use https://pub.dev/packages/flutter_secure_storage instead.
I would like to propose to change the current settings page.
We cannot however just replace the settings page with the intro page.
As it would remove the ability to select/ add/remove profiles.
Since we already added intro pages, it doesn't make sense to have effectively the same functionally in two places.
(Except the profiles feature).
Display which data source (IServ, Schulmanager) the substitution is from, when opening the info dialog of a substitution.
This is useful information to know, since the "Schulmanager" and IServ data source differ in reliability and update time. So knowing where the data comes from makes it easier for the user to assess, if the data can be relied upon.
It also makes it easier to debug and report errors.
Describe the bug and what you did in the app when the bug happened
The bottom left or bottom right corner of a ClassGrid object should be rounded when it's at one of the bottom corners of the timetable. Empty Cells already have this behavior.
The app should support adding AGs to the course list and displaying them and their potential substitutions.
This information is already stored in the special "AG" class on IServ only.
There are numerous people that have AGs, while they might know when they have them, since they chose them themselves.
They might not know if they are substituted. Providing this information in the App is trivial and comes with a great benefit for those people.
Describe the bug and what you did in the app when the bug happened
The Schulmanager integration does not appear to be reporting substitutions. It currently only reports dropouts.
Expected behaviour
The integration should report all kinds of changes, not just dropouts.
It would be nice to have a feature that allows the user to take an image of a timetable printed on paper and extracts the course names from that image.
This feature could be displayed in the course list intro screen with a button that instructs the user to take an image of their timetable paper.
This is feature would help new users setup their correct courses faster (Just take a photo and your course list is now correct), because every student usually gets a printed timetable when their timetable changes substantially.
Save substitutions for whole week.
The Feature is important, since it is helpful to know what substitutions you had yesterday for example, since this is not currently possible.
Describe the bug and what you did in the app when the bug happened
The app displays the substitutions of the previous week.
Expected behaviour
The app substitution cache resets the days, which are older than a week, thus not displaying stale data.
Smartphone:
Describe the bug and what you did in the app when the bug happened
Data is not loaded from the Schulmanger, even when logged into IServ.
Expected behaviour
It should work.
Store IServ session cookies on the device (In secure storage) and only login, when the old session expired.
Recent changes in the IServ login process made it quite slow (and more unreliable).
These changes also affect our apps loading times. Storing session cookies on the device, instead of login in every single time would probably significantly improve performance.
Describe the bug and what you did in the app when the bug happened
Due to changes in the IServ web page, the login process is not functional any more.
Expected behaviour
The login process works and the Callander and Schulmanger integrations keep on working.
Describe the bug and what you did in the app when the bug happened
Android storrage permission popup is not shown, when starting the App
Expected behaviour
The Popup is shown and the users has the ability to enable the storrage Permissions
Smartphone:
Describe the bug and what you did in the app when the bug happened
They made a change again and now the substitution parsers fails.
This causes the app to load indefinitely.
Expected behaviour
It does not load indefinitely and does not fail to parse the substitution plan because of "Vertr-Text-2".
Smartphone:
Describe the bug and what you did in the app when the bug happened
When opening the app, no 10-11 hour are displayed, even though the class is set to be a full height school grade (Q1)
This issue goes away after opening the settings and clicking on done.
Expected behaviour
The subjects in the 10-11 hours get displayed when opening the app initially.
Smartphone:
Describe the bug and what you did in the app when the bug happened
Substitutions that are too long break the layout, forcing containers to grow, causing the layout to break in the main plan and the detail view.
Expected behaviour
Instead of trying to display the entire substitution the App should shorten the text, so that the layout does not break.
Alternative the substitution font size could be reduced.
Smartphone:
Add null safety.
The compiler keeps yelling at me.
Add the ability to pull substitution data from Schulmanger and display it in the app.
Additionally, it would be possible to relay substitution data to others via Bluetooth, however this would need to be an opt-in mechanism, since this allows for others to find out your subjects without your consent. Annother problem is, that the raw data from the Schulmanager app is not verifiable, which means that an attacker could fabricate wrong substitutions without any way for the peers to know that the data is wrong.
This is useful, since the Schulmanager allows for live substitution updates, while the current approach only allows for daily updates.
The old approach is still critical, since not everyone has access to a Schulmanger account or doesn't want to authenticate in any way.
Wouldn't it make sense, if we saved the file data in one file instead of 2. That means we can get rid of some duplicate code in loadProfileManagerAndThemeFromFiles
and might even be able to refactor shared state, so we can use it for both file and local storage saving.
Is there a reason you implemented it this way ? @GreenOpposite
I would be happy to do the refactoring (I also need some of that juicy green on my profile ๐ฉ)
In some cases when refreshing, lessons get duplicated to other days.
This does not happen when opening the app for the first time or reloading via the options.
To Reproduce:
Use class 11d
without any courses
The lessons don't get duplicated to other days.
Change the App Icon to something that is more original than a modified version of the WebUntis Icon.
This is important in order to be able to increase the user base of the app,
because the current Icon could be considered a copyright violation and that would look bad.
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.