forked from firka/student-legacy
added api endpoint and auto update fix
This commit is contained in:
parent
a401ff32d9
commit
8feea02f68
13
filcnaplo/ios/Flutter/flutter_export_environment 2.sh
Executable file
13
filcnaplo/ios/Flutter/flutter_export_environment 2.sh
Executable 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"
|
@ -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();
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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"
|
||||||
|
@ -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";
|
||||||
|
@ -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 = [];
|
||||||
|
@ -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),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user