fix: čitelnější kód
This commit is contained in:
parent
32c80ad552
commit
334a74f808
2 changed files with 42 additions and 9 deletions
|
@ -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: ).+?(?=&)').firstMatch(o);
|
RegExp(r'(?<=Cena při objednání jídla: ).+?(?=&)').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("&", "&");
|
.replaceAll("&", "&");
|
||||||
|
|
||||||
var jidlo = Burza(
|
var jidlo = Burza(
|
||||||
den: datum,
|
den: datum,
|
||||||
varianta: varianta,
|
varianta: varianta,
|
||||||
|
|
|
@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue