added api endpoint and auto update fix

This commit is contained in:
Kima 2023-09-04 21:45:11 +02:00
parent a401ff32d9
commit 8feea02f68
7 changed files with 77 additions and 31 deletions

View File

@ -0,0 +1,13 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/kima/src/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/kima/Documents/refilc/app/naplo/filcnaplo"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=4.2.0"
export "FLUTTER_BUILD_NUMBER=220"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"

View File

@ -101,21 +101,21 @@ Future loginAPI({
Provider.of<UserProvider>(context, listen: false).setUser(user.id); Provider.of<UserProvider>(context, listen: false).setUser(user.id);
// Get user data // Get user data
// try { try {
await Future.wait([ await Future.wait([
Provider.of<GradeProvider>(context, listen: false).fetch(), Provider.of<GradeProvider>(context, listen: false).fetch(),
Provider.of<TimetableProvider>(context, listen: false) Provider.of<TimetableProvider>(context, listen: false)
.fetch(week: Week.current()), .fetch(week: Week.current()),
Provider.of<ExamProvider>(context, listen: false).fetch(), Provider.of<ExamProvider>(context, listen: false).fetch(),
Provider.of<HomeworkProvider>(context, listen: false).fetch(), Provider.of<HomeworkProvider>(context, listen: false).fetch(),
Provider.of<MessageProvider>(context, listen: false).fetchAll(), Provider.of<MessageProvider>(context, listen: false).fetchAll(),
Provider.of<NoteProvider>(context, listen: false).fetch(), Provider.of<NoteProvider>(context, listen: false).fetch(),
Provider.of<EventProvider>(context, listen: false).fetch(), Provider.of<EventProvider>(context, listen: false).fetch(),
Provider.of<AbsenceProvider>(context, listen: false).fetch(), Provider.of<AbsenceProvider>(context, listen: false).fetch(),
]); ]);
// } catch (error) { } catch (error) {
// print("WARNING: failed to fetch user data: $error"); print("WARNING: failed to fetch user data: $error");
// } }
if (onSuccess != null) onSuccess(); if (onSuccess != null) onSuccess();

View File

@ -25,18 +25,23 @@ extension UpdateHelper on Release {
if (!await apk.exists()) { if (!await apk.exists()) {
updateCallback(-1, UpdateState.downloading); updateCallback(-1, UpdateState.downloading);
var bytes = await download(updateCallback: updateCallback); var storagePerms = await Permission.storage.request().isGranted;
if (!await StorageHelper.write(apk.path, bytes)) { if (storagePerms) {
throw "failed to write apk: permission denied"; var bytes = await download(updateCallback: updateCallback);
if (!await StorageHelper.write(apk.path, bytes)) {
throw "failed to write apk: permission denied";
}
} else {
throw storagePerms;
} }
} }
updateCallback(-1, UpdateState.installing); updateCallback(-1, UpdateState.installing);
var permStatus = var installPerms =
(await Permission.manageExternalStorage.request().isGranted && (await Permission.manageExternalStorage.request().isGranted &&
await Permission.requestInstallPackages.request().isGranted); await Permission.requestInstallPackages.request().isGranted);
if (permStatus) { if (installPerms) {
var result = await OpenFile.open(apk.path); var result = await OpenFile.open(apk.path);
if (result.type != ResultType.done) { if (result.type != ResultType.done) {

View File

@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
homepage: https://refilc.hu homepage: https://refilc.hu
publish_to: "none" publish_to: "none"
version: 4.2.1+221 version: 4.2.0+220
environment: environment:
sdk: ">=2.17.0 <3.0.0" sdk: ">=2.17.0 <3.0.0"

View File

@ -24,6 +24,11 @@ class KretaAPI {
KretaApiEndpoints.groupAverages + KretaApiEndpoints.groupAverages +
"?oktatasiNevelesiFeladatUid=" + "?oktatasiNevelesiFeladatUid=" +
uid; uid;
static String averages(String iss, String uid) =>
BaseKreta.kreta(iss) +
KretaApiEndpoints.averages +
"?oktatasiNevelesiFeladatUid=" +
uid;
static String timetable(String iss, {DateTime? start, DateTime? end}) => static String timetable(String iss, {DateTime? start, DateTime? end}) =>
BaseKreta.kreta(iss) + BaseKreta.kreta(iss) +
KretaApiEndpoints.timetable + KretaApiEndpoints.timetable +
@ -90,6 +95,8 @@ class KretaApiEndpoints {
static const groups = "/ellenorzo/V3/Sajat/OsztalyCsoportok"; static const groups = "/ellenorzo/V3/Sajat/OsztalyCsoportok";
static const groupAverages = static const groupAverages =
"/ellenorzo/V3/Sajat/Ertekelesek/Atlagok/OsztalyAtlagok"; "/ellenorzo/V3/Sajat/Ertekelesek/Atlagok/OsztalyAtlagok";
static const averages =
"/ellenorzo/V3/Sajat/Ertekelesek/Atlagok/TantargyiAtlagok";
static const timetable = "/ellenorzo/V3/Sajat/OrarendElemek"; static const timetable = "/ellenorzo/V3/Sajat/OrarendElemek";
static const exams = "/ellenorzo/V3/Sajat/BejelentettSzamonkeresek"; static const exams = "/ellenorzo/V3/Sajat/BejelentettSzamonkeresek";
static const homework = "/ellenorzo/V3/Sajat/HaziFeladatok"; static const homework = "/ellenorzo/V3/Sajat/HaziFeladatok";

View File

@ -73,8 +73,16 @@ class HomeworkProvider with ChangeNotifier {
if (user == null) throw "Cannot fetch Homework for User null"; if (user == null) throw "Cannot fetch Homework for User null";
String iss = user.instituteCode; String iss = user.instituteCode;
List? homeworkJson = await Provider.of<KretaClient>(_context, listen: false)
.getAPI(KretaAPI.homework(iss, start: from)); List? homeworkJson = [];
try {
homeworkJson = await Provider.of<KretaClient>(_context, listen: false)
.getAPI(KretaAPI.homework(iss, start: from));
} catch (e) {
// error fetcing homework (unknown error)
}
if (homeworkJson == null) throw "Cannot fetch Homework for User ${user.id}"; if (homeworkJson == null) throw "Cannot fetch Homework for User ${user.id}";
List<Homework> homework = []; List<Homework> homework = [];

View File

@ -18,7 +18,8 @@ class UpdateView extends StatefulWidget {
final Release release; final Release release;
static void show(Release release, {required BuildContext context}) => showBottomCard(context: context, child: UpdateView(release)); static void show(Release release, {required BuildContext context}) =>
showBottomCard(context: context, child: UpdateView(release));
@override @override
_UpdateViewState createState() => _UpdateViewState(); _UpdateViewState createState() => _UpdateViewState();
@ -45,7 +46,8 @@ class _UpdateViewState extends State<UpdateView> {
children: [ children: [
Text( Text(
"new_update".i18n, "new_update".i18n,
style: const TextStyle(fontWeight: FontWeight.w700, fontSize: 18.0), style: const TextStyle(
fontWeight: FontWeight.w700, fontSize: 18.0),
), ),
Text( Text(
"${widget.release.version}", "${widget.release.version}",
@ -75,7 +77,7 @@ class _UpdateViewState extends State<UpdateView> {
borderRadius: BorderRadius.circular(12.0), borderRadius: BorderRadius.circular(12.0),
), ),
child: SizedBox( child: SizedBox(
height: 125.0, height: 200.0,
child: Markdown( child: Markdown(
padding: const EdgeInsets.symmetric(horizontal: 12.0), padding: const EdgeInsets.symmetric(horizontal: 12.0),
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
@ -91,21 +93,30 @@ class _UpdateViewState extends State<UpdateView> {
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
if (state == UpdateState.downloading || state == UpdateState.preparing) if (state == UpdateState.downloading ||
state == UpdateState.preparing)
Container( Container(
height: 18.0, height: 18.0,
width: 18.0, width: 18.0,
margin: const EdgeInsets.only(right: 8.0), margin: const EdgeInsets.only(right: 8.0),
child: CircularProgressIndicator( child: CircularProgressIndicator(
value: progress > 0.05 ? progress : null, value: progress > 0.05 ? progress : null,
color: ColorUtils.foregroundColor(AppColors.of(context).filc), color: ColorUtils.foregroundColor(
AppColors.of(context).filc),
), ),
), ),
Text(["download".i18n, "downloading".i18n, "downloading".i18n, "installing".i18n][state.index].toUpperCase()), Text([
"download".i18n,
"downloading".i18n,
"downloading".i18n,
"installing".i18n
][state.index]
.toUpperCase()),
], ],
), ),
backgroundColor: AppColors.of(context).filc, backgroundColor: AppColors.of(context).filc,
onPressed: state == UpdateState.none ? () => downloadPrecheck() : null, onPressed:
state == UpdateState.none ? () => downloadPrecheck() : null,
), ),
), ),
], ],
@ -113,7 +124,8 @@ class _UpdateViewState extends State<UpdateView> {
); );
} }
String fmtSize() => "${(widget.release.downloads.first.size / 1024 / 1024).toStringAsFixed(1)} MB"; String fmtSize() =>
"${(widget.release.downloads.first.size / 1024 / 1024).toStringAsFixed(1)} MB";
void downloadPrecheck() { void downloadPrecheck() {
final status = Provider.of<StatusProvider>(context, listen: false); final status = Provider.of<StatusProvider>(context, listen: false);
@ -157,6 +169,7 @@ class _UpdateViewState extends State<UpdateView> {
.then((_) => Navigator.of(context).maybePop()) .then((_) => Navigator.of(context).maybePop())
.catchError((error, stackTrace) { .catchError((error, stackTrace) {
if (mounted) { if (mounted) {
Navigator.of(context).maybePop();
ScaffoldMessenger.of(context).showSnackBar(CustomSnackBar( ScaffoldMessenger.of(context).showSnackBar(CustomSnackBar(
context: context, context: context,
content: Text("error".i18n), content: Text("error".i18n),