Práce na #4 + pár vylepšení

This commit is contained in:
Matyáš Caras 2022-04-26 18:20:42 +02:00
parent de7f9a7caa
commit 0c96776a0e
13 changed files with 151 additions and 7 deletions

4
.fossa.yml Normal file
View file

@ -0,0 +1,4 @@
version: 3
targets:
only:
- type: pub

View file

@ -1,3 +1,4 @@
# 0.2.0
# 0.1.1 # 0.1.1
- Přidán RefreshIndicator na obrazovku s jídelníčkem - Přidán RefreshIndicator na obrazovku s jídelníčkem
- Přidáno odsazení od okrajů u jídelníčku - Přidáno odsazení od okrajů u jídelníčku

View file

@ -1,5 +1,7 @@
## Zásady používání a ochrany soukromí aplikace OpenCanteen ## Zásady používání a ochrany soukromí aplikace OpenCanteen
Platí od 5. 4. 2022 Platí od 26. 4. 2022
[Předchozí verze](https://github.com/hernikplays/opencanteen/blob/0.1.1/PRIVACY.md)
### Používání ### Používání
- Tato aplikace není vyvíjena nebo podporována firmou Z-WARE s.r.o. a není oficiální klient pro systém iCanteen - Tato aplikace není vyvíjena nebo podporována firmou Z-WARE s.r.o. a není oficiální klient pro systém iCanteen
- Uživatel aplikace sám zodpovídá za svůj účet a údaje - Uživatel aplikace sám zodpovídá za svůj účet a údaje
@ -11,7 +13,7 @@ Platí od 5. 4. 2022
- Aplikace odesílá data pouze na URL instance systému iCanteen, kterou uživatel aplikace sám zadá - Aplikace odesílá data pouze na URL instance systému iCanteen, kterou uživatel aplikace sám zadá
- V případě, že tato instance není zabezpečena protokolem HTTPS, neručí vývojář aplikace za vzniklá nebezpečí - V případě, že tato instance není zabezpečena protokolem HTTPS, neručí vývojář aplikace za vzniklá nebezpečí
- Aplikace neobsahuje reklamy - Aplikace neobsahuje reklamy
- Aplikace dlouhodobě ukládá údaje uživatele (přihlašovací jméno, heslo, URL k instanci) pouze v případě, že uživatel při přihlašování povolí možnost `Zapamatovat si mě`. V tom případě jsou data zašifrována a uložena na zařízení uživatele - Aplikace dlouhodobě ukládá do zařízení údaje uživatele (přihlašovací jméno, heslo, URL k instanci, jídelníček na aktuální den pro offline zobrazení) pouze v případě, že uživatel při přihlašování povolí možnost `Zapamatovat si mě`. V tom případě jsou data zašifrována a uložena na zařízení uživatele
- V opačném případě jsou údaje uložené v mezipaměti jen na dobu nezbytně nutnou a následně smazány operačním systémem - V opačném případě jsou údaje uložené v mezipaměti jen na dobu nezbytně nutnou a následně smazány operačním systémem
### Kontakt ### Kontakt

View file

@ -17,4 +17,9 @@ class LoginManager {
await storage.write(key: "oc_pass", value: pass); await storage.write(key: "oc_pass", value: pass);
await storage.write(key: "oc_url", value: url); await storage.write(key: "oc_url", value: url);
} }
static Future<bool> zapamatovat() async {
const storage = FlutterSecureStorage();
return await storage.containsKey(key: "oc_pass");
}
} }

View file

@ -219,7 +219,11 @@ class _LoginPageState extends State<LoginPage> {
if (!d!) return; if (!d!) return;
await storage.write(key: "oc_souhlas", value: "ano"); await storage.write(key: "oc_souhlas", value: "ano");
} }
if (!canteenControl.text.startsWith("https://") &&
!canteenControl.text.startsWith("http://")) {
canteenControl.text =
"https://" + canteenControl.text;
}
var canteen = Canteen(canteenControl.text); var canteen = Canteen(canteenControl.text);
var l = await canteen.login( var l = await canteen.login(
userControl.text, passControl.text); userControl.text, passControl.text);

View file

@ -20,7 +20,10 @@ class _AboutPageState extends State<AboutPage> {
child: Column(mainAxisSize: MainAxisSize.min, children: [ child: Column(mainAxisSize: MainAxisSize.min, children: [
const Text("OpenCanteen", style: TextStyle(fontSize: 30)), const Text("OpenCanteen", style: TextStyle(fontSize: 30)),
const Text("© 2022 Matyáš Caras a přispěvatelé"), const Text("© 2022 Matyáš Caras a přispěvatelé"),
const Text("Vydáno pod licencí GNU GPLv3"), InkWell(
onTap: () => launch(
"https://github.com/hernikplays/opencanteen/blob/main/LICENSE"),
child: const Text("Vydáno pod licencí GNU GPLv3")),
const SizedBox(height: 15), const SizedBox(height: 15),
const Text("Použité knihovny:", style: TextStyle(fontSize: 19)), const Text("Použité knihovny:", style: TextStyle(fontSize: 19)),
const SizedBox(height: 10), const SizedBox(height: 10),
@ -47,7 +50,12 @@ class _AboutPageState extends State<AboutPage> {
cudlik( cudlik(
"canteenlib", "canteenlib",
"Copyright (c) 2022 Matyáš Caras and contributors, licence MIT", "Copyright (c) 2022 Matyáš Caras and contributors, licence MIT",
"https://github.com/hernikplays/canteenlib/blob/main/LICENSE") "https://github.com/hernikplays/canteenlib/blob/main/LICENSE"),
const SizedBox(height: 10),
cudlik(
"path_provider",
"Copyright 2013 The Flutter Authors. All rights reserved., licence BSD-3-Clause",
"https://github.com/flutter/plugins/blob/main/packages/path_provider/path_provider/LICENSE")
]), ]),
), ),
); );

View file

@ -1,9 +1,14 @@
import 'dart:convert';
import 'dart:io';
import 'package:canteenlib/canteenlib.dart'; import 'package:canteenlib/canteenlib.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:opencanteen/util.dart'; import 'package:opencanteen/util.dart';
import 'package:path_provider/path_provider.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import '../loginmanager.dart';
import '../main.dart'; import '../main.dart';
import 'about.dart'; import 'about.dart';
@ -47,7 +52,7 @@ class _JidelnicekPageState extends State<JidelnicekPage> {
} }
widget.canteen.ziskejUzivatele().then((kr) { widget.canteen.ziskejUzivatele().then((kr) {
kredit = kr.kredit; kredit = kr.kredit;
widget.canteen.jidelnicekDen(den: den).then((jd) { widget.canteen.jidelnicekDen(den: den).then((jd) async {
setState(() { setState(() {
obsah = []; obsah = [];
if (jd.jidla.isEmpty) { if (jd.jidla.isEmpty) {
@ -205,9 +210,39 @@ class _JidelnicekPageState extends State<JidelnicekPage> {
} }
} }
/// uložení jídelníčku pro dnešek offline
void ulozitDnesekOffline() async {
if (await LoginManager.zapamatovat()) {
Directory appDocDir = await getApplicationDocumentsDirectory();
for (var f in appDocDir.listSync()) {
// Vymažeme obsah
if (f.path.contains("jidelnicek")) {
f.deleteSync();
}
}
// Uložíme nová data
var j = await widget.canteen.jidelnicekDen();
var soubor = File(appDocDir.path +
"/jidelnicek_${den.year}-${den.month}-${den.day}.json");
soubor.createSync();
var jidla = [];
for (var jidlo in j.jidla) {
jidla.add({
"nazev": jidlo.nazev,
"varianta": jidlo.varianta,
"objednano": jidlo.objednano,
"cena": jidlo.cena,
"naBurze": jidlo.naBurze
});
}
await soubor.writeAsString(json.encode(jidla));
}
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
ulozitDnesekOffline();
nactiJidlo(); nactiJidlo();
} }

View file

@ -120,6 +120,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.2" version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -261,6 +268,55 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0" version: "1.8.0"
path_provider:
dependency: "direct main"
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.9"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.12"
path_provider_ios:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
@ -268,6 +324,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.4.0" version: "4.4.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -275,6 +338,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -371,6 +441,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.1.1"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.2"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
xml: xml:
dependency: transitive dependency: transitive
description: description:

View file

@ -6,7 +6,7 @@ publish_to: 'none'
# The following defines the version and build number for your application. # The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43 # A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +. # followed by an optional build number separated by a +.
version: 0.1.1+2 version: 0.2.0+3
environment: environment:
sdk: ">=2.16.1 <3.0.0" sdk: ">=2.16.1 <3.0.0"
@ -20,6 +20,7 @@ dependencies:
connectivity_plus: ^2.2.1 connectivity_plus: ^2.2.1
flutter_secure_storage: ^5.0.2 flutter_secure_storage: ^5.0.2
url_launcher: ^6.0.20 url_launcher: ^6.0.20
path_provider: ^2.0.9
dev_dependencies: dev_dependencies:
flutter_lints: ^1.0.0 flutter_lints: ^1.0.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB