fix: čitelnější kód

This commit is contained in:
Matyáš Caras 2022-09-04 11:38:22 +02:00
parent 32c80ad552
commit 334a74f808
2 changed files with 42 additions and 9 deletions

View file

@ -114,6 +114,7 @@ class Canteen {
if (cookies["JSESSIONID"] == "" || cookies["XSRF-TOKEN"] == "") { if (cookies["JSESSIONID"] == "" || cookies["XSRF-TOKEN"] == "") {
await _getFirstSession(); await _getFirstSession();
} }
var res = var res =
await http.post(Uri.parse(url + "/j_spring_security_check"), headers: { await http.post(Uri.parse(url + "/j_spring_security_check"), headers: {
"Cookie": "JSESSIONID=" + "Cookie": "JSESSIONID=" +
@ -132,9 +133,11 @@ class Canteen {
"targetUrl": "targetUrl":
"/faces/secured/main.jsp?terminal=false&status=true&printer=&keyboard=" "/faces/secured/main.jsp?terminal=false&status=true&printer=&keyboard="
}); });
if (res.headers['set-cookie']!.contains("remember-me=;")) { if (res.headers['set-cookie']!.contains("remember-me=;")) {
return false; // špatné heslo return false; // špatné heslo
} }
if (res.statusCode != 302) { if (res.statusCode != 302) {
return Future.error("Chyba: ${res.body}"); return Future.error("Chyba: ${res.body}");
} }
@ -156,18 +159,22 @@ class Canteen {
? "; " + cookies["remember-me"]! + ";" ? "; " + cookies["remember-me"]! + ";"
: ";"), : ";"),
}); });
if (r.statusCode != 200 || if (r.statusCode != 200 ||
r.body.contains("fail") || r.body.contains("fail") ||
r.body.contains("Chyba")) { r.body.contains("Chyba")) {
return Future.error("Chyba: ${r.body}"); return Future.error("Chyba: ${r.body}");
} }
if (r.body.contains("přihlášení uživatele")) { if (r.body.contains("přihlášení uživatele")) {
prihlasen = false; prihlasen = false;
return Future.error("Uživatel není přihlášen"); return Future.error("Uživatel není přihlášen");
} }
if (r.headers.containsKey("set-cookie")) { if (r.headers.containsKey("set-cookie")) {
_parseCookies(r.headers["set-cookie"]!); _parseCookies(r.headers["set-cookie"]!);
} }
return r.body; return r.body;
} }
@ -184,14 +191,12 @@ class Canteen {
dotAll: true) dotAll: true)
.allMatches(res) .allMatches(res)
.toList(); .toList();
List<Jidelnicek> jidelnicek = []; List<Jidelnicek> jidelnicek = [];
for (var t in reg) { for (var t in reg) {
// projedeme každý den individuálně // projedeme každý den individuálně
var j = t var j = t.group(0).toString(); // převedeme text na něco přehlednějšího
.group(0)
.toString() /*.replaceAll(RegExp(r'( )+|([^>a-z]\n)'),
'')*/
; // převedeme text na něco přehlednějšího
var den = DateTime.parse(RegExp(r'(?<=day-).+?(?=")', dotAll: true) var den = DateTime.parse(RegExp(r'(?<=day-).+?(?=")', dotAll: true)
.firstMatch(j)! .firstMatch(j)!
.group(0) .group(0)
@ -210,24 +215,28 @@ class Canteen {
} }
List<Jidlo> jidla = []; List<Jidlo> jidla = [];
for (var jidloNaDen in jidlaDenne) { for (var jidloNaDen in jidlaDenne) {
// projedeme vsechna jidla // projedeme vsechna jidla
var s = jidloNaDen.group(0)!.replaceAll( var s = jidloNaDen.group(0)!.replaceAll(
RegExp( RegExp(
r'[a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:] [a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:]'), r'[a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:] [a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:]'),
''); // odstraní dvojté mezery mezi písmeny ''); // odstraní dvojté mezery mezi písmeny
var vydejna = RegExp(r'(?<=<span style="color: #1b75bb;">).+?(?=<)') var vydejna = RegExp(r'(?<=<span style="color: #1b75bb;">).+?(?=<)')
.firstMatch(s); // název výdejny / verze 2.18 .firstMatch(s); // název výdejny / verze 2.18
vydejna ??= RegExp( vydejna ??= RegExp(
// TODO: Lepší systém pro podporu různých verzí iCanteen // TODO: Lepší systém pro podporu různých verzí iCanteen
r'(?<=<span class="smallBoldTitle" style="color: #1b75bb;">).+?(?=<)') r'(?<=<span class="smallBoldTitle" style="color: #1b75bb;">).+?(?=<)')
.firstMatch(s); // název výdejny / verze 2.10 .firstMatch(s); // název výdejny / verze 2.10
var hlavni = RegExp( var hlavni = RegExp(
r' {20}(([a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:\/]+ )+[a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:\/]+)', r' {20}(([a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:\/]+ )+[a-zA-ZěščřžýáíéÉÍÁÝŽŘČŠĚŤŇťň.,:\/]+)',
dotAll: true) dotAll: true)
.firstMatch(s)! .firstMatch(s)!
.group(1) .group(1)
.toString(); // Jídlo .toString(); // Jídlo
jidla.add(Jidlo( jidla.add(Jidlo(
nazev: hlavni, nazev: hlavni,
objednano: false, objednano: false,
@ -254,7 +263,9 @@ class Canteen {
if (!prihlasen) { if (!prihlasen) {
return Future.error("Uživatel není přihlášen"); return Future.error("Uživatel není přihlášen");
} }
den ??= DateTime.now(); den ??= DateTime.now();
String res; String res;
try { try {
res = await _getRequest( res = await _getRequest(
@ -262,6 +273,7 @@ class Canteen {
} catch (e) { } catch (e) {
return Future.error(e); return Future.error(e);
} }
var obedDen = DateTime.parse(RegExp(r'(?<=day-).+?(?=")', dotAll: true) var obedDen = DateTime.parse(RegExp(r'(?<=day-).+?(?=")', dotAll: true)
.firstMatch(res)! .firstMatch(res)!
.group(0) .group(0)
@ -271,6 +283,7 @@ class Canteen {
RegExp(r'(?<=<div class="jidWrapLeft">).+?((fa-clock))', dotAll: true) RegExp(r'(?<=<div class="jidWrapLeft">).+?((fa-clock))', dotAll: true)
.allMatches(res) .allMatches(res)
.toList(); .toList();
for (var obed in jidelnicek) { for (var obed in jidelnicek) {
// formátování do třídy // formátování do třídy
var o = obed var o = obed
@ -281,12 +294,14 @@ class Canteen {
var lzeObjednat = !(o.contains("nelze zrušit") || var lzeObjednat = !(o.contains("nelze zrušit") ||
o.contains("nelze objednat") || o.contains("nelze objednat") ||
o.contains("nelze změnit")); o.contains("nelze změnit"));
var cenaMatch = var cenaMatch =
RegExp(r'(?<=Cena objednaného jídla">).+?(?=&)').firstMatch(o); RegExp(r'(?<=Cena objednaného jídla">).+?(?=&)').firstMatch(o);
cenaMatch ??= cenaMatch ??=
RegExp(r'(?<=Cena při objednání jídla:&nbsp;).+?(?=&)').firstMatch(o); RegExp(r'(?<=Cena při objednání jídla:&nbsp;).+?(?=&)').firstMatch(o);
cenaMatch ??= cenaMatch ??=
RegExp(r'(?<=Cena při objednání jídla">).+?(?=&)').firstMatch(o); RegExp(r'(?<=Cena při objednání jídla">).+?(?=&)').firstMatch(o);
var cena = var cena =
double.parse(cenaMatch!.group(0).toString().replaceAll(",", ".")); double.parse(cenaMatch!.group(0).toString().replaceAll(",", "."));
var jidlaProDen = RegExp(r'(?<=Polévka: ).+') var jidlaProDen = RegExp(r'(?<=Polévka: ).+')
@ -301,6 +316,7 @@ class Canteen {
.firstMatch(o)! .firstMatch(o)!
.group(0) .group(0)
.toString(); .toString();
String? orderUrl; String? orderUrl;
String? burzaUrl; String? burzaUrl;
if (lzeObjednat) { if (lzeObjednat) {
@ -318,6 +334,7 @@ class Canteen {
burzaUrl = match.group(1)!.replaceAll("amp;", ""); burzaUrl = match.group(1)!.replaceAll("amp;", "");
} }
} }
jidla.add(Jidlo( jidla.add(Jidlo(
nazev: jidlaProDen[1] nazev: jidlaProDen[1]
.replaceAll(r' (?=[^a-zA-ZěščřžýáíéĚŠČŘŽÝÁÍÉŤŇťň])', ''), .replaceAll(r' (?=[^a-zA-ZěščřžýáíéĚŠČŘŽÝÁÍÉŤŇťň])', ''),
@ -347,6 +364,7 @@ class Canteen {
if (!prihlasen) { if (!prihlasen) {
return Future.error("Uživatel není přihlášen"); return Future.error("Uživatel není přihlášen");
} }
if (!j.lzeObjednat || j.orderUrl == null || j.orderUrl!.isEmpty) { if (!j.lzeObjednat || j.orderUrl == null || j.orderUrl!.isEmpty) {
return Future.error( return Future.error(
"Jídlo nelze objednat nebo nemá adresu pro objednání"); "Jídlo nelze objednat nebo nemá adresu pro objednání");
@ -379,10 +397,12 @@ class Canteen {
if (!prihlasen) { if (!prihlasen) {
return Future.error("Uživatel není přihlášen"); return Future.error("Uživatel není přihlášen");
} }
if (j.burzaUrl == null || j.burzaUrl!.isEmpty) { if (j.burzaUrl == null || j.burzaUrl!.isEmpty) {
return Future.error( return Future.error(
"Jídlo nelze uložit do burzy nebo nemá adresu pro uložení"); "Jídlo nelze uložit do burzy nebo nemá adresu pro uložení");
} }
try { try {
await _getRequest("/faces/secured/" + j.burzaUrl!); // provést operaci await _getRequest("/faces/secured/" + j.burzaUrl!); // provést operaci
} catch (e) { } catch (e) {
@ -425,6 +445,7 @@ class Canteen {
dotAll: true) dotAll: true)
.allMatches(bu) .allMatches(bu)
.toList(); .toList();
// Získat datum // Získat datum
var datumRaw = RegExp(r'\d\d\.\d\d\.\d{4}') var datumRaw = RegExp(r'\d\d\.\d\d\.\d{4}')
.firstMatch(data[1].group(0)!)! .firstMatch(data[1].group(0)!)!
@ -442,6 +463,7 @@ class Canteen {
.firstMatch(bu)! .firstMatch(bu)!
.group(0)! .group(0)!
.replaceAll("&amp;", "&"); .replaceAll("&amp;", "&");
var jidlo = Burza( var jidlo = Burza(
den: datum, den: datum,
varianta: varianta, varianta: varianta,

View file

@ -7,14 +7,25 @@ void main() {
load(); load();
Canteen c = Canteen(env["ADDRESS"]!); Canteen c = Canteen(env["ADDRESS"]!);
setUp(() { test('Log-in test', () {
c.login(env["USER"]!, env["PASS"]!); c.login(env["USER"]!, env["PASS"]!).then((r) => expect(r, true));
}); });
test('First Test', () { test('First Test', () {
c.login(env["USER"]!, env["PASS"]!).then((r) {
c.jidelnicekDen().then((t) { c.jidelnicekDen().then((t) {
expect(DateTime.now().day, t.den.day); expect(DateTime.now().day, t.den.day);
}); });
}); });
}); });
test('Neprázdný jídelníček', () {
c.login(env["USER"]!, env["PASS"]!).then((r) {
c.jidelnicekDen(den: DateTime.parse("2022-08-15")).then((t) {
print(t.jidla[0].nazev);
expect(t.jidla[0].nazev.isNotEmpty, true);
});
});
});
});
} }