Compare commits
3 commits
Author | SHA1 | Date | |
---|---|---|---|
cd14eb62f3 | |||
7ea3df0b2b | |||
58db9adf6e |
|
@ -1,3 +1,11 @@
|
||||||
|
## 2.0.0
|
||||||
|
- Alergeny jsou nyní ve tříde `Alergen`
|
||||||
|
- Opravena chyba, kdy se HTML alergenů propisovalo do názvu jídla
|
||||||
|
|
||||||
|
## 1.1.4
|
||||||
|
- Opravit info o stavu na burze
|
||||||
|
## 1.1.3
|
||||||
|
- Opravit hledání burza URL u jídelen, kde je tlačítko ve tvaru `X ks do burzy`
|
||||||
## 1.1.2
|
## 1.1.2
|
||||||
- Opravit negativní čísla v kreditu, účet pro platby by @tpkowastaken in https://github.com/hernikplays/canteenlib/pull/4
|
- Opravit negativní čísla v kreditu, účet pro platby by @tpkowastaken in https://github.com/hernikplays/canteenlib/pull/4
|
||||||
## 1.1.1
|
## 1.1.1
|
||||||
|
|
|
@ -11,8 +11,8 @@ Kantýny, které v adrese obsahují i číslo portu, dokážou být často probl
|
||||||
|
|
||||||
| Provozovatel | Verze iCanteen | Funkční | Verze knihovny | Adresa |
|
| Provozovatel | Verze iCanteen | Funkční | Verze knihovny | Adresa |
|
||||||
|:--------------:|------------------|---------|----------------|---------|
|
|:--------------:|------------------|---------|----------------|---------|
|
||||||
| SŠTE Brno | iCanteen 2.18.19 | ✅ | 1.0.1 | https://stravovani.sstebrno.cz
|
| SŠTE Brno | iCanteen 2.19.13 | ✅ | 2.0.0 | https://stravovani.sstebrno.cz
|
||||||
| SPŠ Třebíč | iCanteen 2.10.25 | ❓ | 0.1.0-alpha | https://icanteen.spst.cz
|
| SPŠ Třebíč | iCanteen 2.10.25 | ❌ | 0.1.0-alpha | https://icanteen.spst.cz
|
||||||
| SPŠEI Ostrava | iCanteen 2.17.03 | ❓ [zde](https://git.mnau.xyz/hernik/canteenlib/issues/2) | 1.0.1 | https://obedy.spseiostrava.cz:8443/
|
| SPŠEI Ostrava | iCanteen 2.17.03 | ❌ [zde](https://git.mnau.xyz/hernik/canteenlib/issues/2) | 1.0.1 | https://obedy.spseiostrava.cz:8443/
|
||||||
|
|
||||||
Pokud chcete přispět s testem, otestujte tuto knihovnu na instanci iCanteen, kde, nejlépe legálně, máte přístup, a nahlašte své poznatky [zde](https://git.mnau.xyz/hernik/canteenlib/issues/new?template=.github%2fISSUE_TEMPLATE%2fhl--en--kompatibility.md)
|
Pokud chcete přispět s testem, otestujte tuto knihovnu na instanci iCanteen, kde, nejlépe legálně, máte přístup, a nahlašte své poznatky [zde](https://git.mnau.xyz/hernik/canteenlib/issues/new?template=.github%2fISSUE_TEMPLATE%2fhl--en--kompatibility.md)
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
## INFO
|
||||||
|
__Tato verze knihovny není dále vyvíjena. Vývoj teď probíhá na https://github.com/tpkowastaken/canteenlib__
|
||||||
|
|
||||||
## O knihovně
|
## O knihovně
|
||||||
Experimentální **neoficiální** webscrape knihovna pro komunikaci se systémem [iCanteen](https://www.z-ware.cz/internetove-objednavky). **Knihovna je aktuálně nestabilní! Používejte na vlastní riziko!**
|
Experimentální **neoficiální** webscrape knihovna pro komunikaci se systémem [iCanteen](https://www.z-ware.cz/internetove-objednavky). **Knihovna je aktuálně nestabilní! Používejte na vlastní riziko!**
|
||||||
|
|
||||||
|
|
|
@ -48,11 +48,12 @@ class Canteen {
|
||||||
prihlasen = false;
|
prihlasen = false;
|
||||||
return Future.error("Uživatel není přihlášen");
|
return Future.error("Uživatel není přihlášen");
|
||||||
}
|
}
|
||||||
var kreditMatch = double.tryParse(RegExp(r' +<span id="Kredit" .+?>(.+?)(?=&)')
|
var kreditMatch = double.tryParse(
|
||||||
.firstMatch(r)!
|
RegExp(r' +<span id="Kredit" .+?>(.+?)(?=&)')
|
||||||
.group(1)!
|
.firstMatch(r)!
|
||||||
.replaceAll(",", ".")
|
.group(1)!
|
||||||
.replaceAll(RegExp(r"[^\w.-]"), ""));
|
.replaceAll(",", ".")
|
||||||
|
.replaceAll(RegExp(r"[^\w.-]"), ""));
|
||||||
var jmenoMatch = RegExp(r'(?<=jméno: <b>).+?(?=<\/b)').firstMatch(r);
|
var jmenoMatch = RegExp(r'(?<=jméno: <b>).+?(?=<\/b)').firstMatch(r);
|
||||||
var prijmeniMatch = RegExp(r'(?<=příjmení: <b>).+?(?=<\/b)').firstMatch(r);
|
var prijmeniMatch = RegExp(r'(?<=příjmení: <b>).+?(?=<\/b)').firstMatch(r);
|
||||||
var kategorieMatch =
|
var kategorieMatch =
|
||||||
|
@ -60,7 +61,7 @@ class Canteen {
|
||||||
var ucetMatch = RegExp(r'účet pro platby do jídelny:\s*<b>(\d+/\d+)</b>')
|
var ucetMatch = RegExp(r'účet pro platby do jídelny:\s*<b>(\d+/\d+)</b>')
|
||||||
.firstMatch(r)
|
.firstMatch(r)
|
||||||
?.group(1)
|
?.group(1)
|
||||||
?.replaceAll(RegExp(r'<\/?b>'), '');//odstranit html tag <b>
|
?.replaceAll(RegExp(r'<\/?b>'), ''); //odstranit html tag <b>
|
||||||
var varMatch =
|
var varMatch =
|
||||||
RegExp(r'(?<=variabilní symbol: <b>).+?(?=<\/b)').firstMatch(r);
|
RegExp(r'(?<=variabilní symbol: <b>).+?(?=<\/b)').firstMatch(r);
|
||||||
var specMatch =
|
var specMatch =
|
||||||
|
@ -305,10 +306,21 @@ class Canteen {
|
||||||
.replaceAll(' ,', ",")
|
.replaceAll(' ,', ",")
|
||||||
.replaceAll(" <br>", "")
|
.replaceAll(" <br>", "")
|
||||||
.replaceAll("\n", "");
|
.replaceAll("\n", "");
|
||||||
var alergeny =
|
var alergenyList =
|
||||||
RegExp(r"""<span title=".+?" class="textGrey">(.+?)<\/span>""")
|
RegExp(r"""<span(?: |\n).+?title="(.+?)".+?>(\d{1,2})""")
|
||||||
.allMatches(jidlaProDen)
|
.allMatches(jidlaProDen)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
|
var alergeny = alergenyList.map<Alergen>((e) {
|
||||||
|
var jmeno = RegExp(r'<b>(.+?)<\/b>')
|
||||||
|
.firstMatch(e.group(1).toString())!
|
||||||
|
.group(1);
|
||||||
|
var popis =
|
||||||
|
RegExp(r'<\/b> - (.+)').firstMatch(e.group(1).toString())?.group(1);
|
||||||
|
var kod = int.parse(e.group(2).toString());
|
||||||
|
return Alergen(nazev: jmeno!, kod: kod, popis: popis);
|
||||||
|
}).toList();
|
||||||
|
|
||||||
var vydejna = RegExp(
|
var vydejna = RegExp(
|
||||||
r'(?<=<span class="smallBoldTitle button-link-align">).+?(?=<)')
|
r'(?<=<span class="smallBoldTitle button-link-align">).+?(?=<)')
|
||||||
.firstMatch(o)!
|
.firstMatch(o)!
|
||||||
|
@ -326,16 +338,19 @@ class Canteen {
|
||||||
} else {
|
} else {
|
||||||
// jinak nastavíme URL pro burzu
|
// jinak nastavíme URL pro burzu
|
||||||
var match = RegExp(
|
var match = RegExp(
|
||||||
r"""db\/dbProcessOrder\.jsp.+?type=((plusburza)|(minusburza)).+?(?=')""")
|
r"""db\/dbProcessOrder\.jsp.+?type=((plusburza)|(minusburza)|(multiburza)).+?(?=')""")
|
||||||
.firstMatch(o);
|
.firstMatch(o);
|
||||||
if (match != null) {
|
if (match != null) {
|
||||||
burzaUrl = match.group(0)!.replaceAll("amp;", "");
|
burzaUrl = match.group(0)!.replaceAll("amp;", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var jidloJmeno = RegExp(r'(.+?)(?=<sub>)')
|
||||||
|
.firstMatch(jidlaProDen)!
|
||||||
|
.group(1)
|
||||||
|
.toString();
|
||||||
jidla.add(
|
jidla.add(
|
||||||
Jidlo(
|
Jidlo(
|
||||||
nazev: jidlaProDen.replaceAll(
|
nazev: jidloJmeno.replaceAll(
|
||||||
r' (?=[^a-zA-ZěščřžýáíéĚŠČŘŽÝÁÍÉŤŇťň])', ''),
|
r' (?=[^a-zA-ZěščřžýáíéĚŠČŘŽÝÁÍÉŤŇťň])', ''),
|
||||||
objednano: objednano,
|
objednano: objednano,
|
||||||
varianta: vydejna,
|
varianta: vydejna,
|
||||||
|
@ -345,8 +360,8 @@ class Canteen {
|
||||||
den: obedDen,
|
den: obedDen,
|
||||||
burzaUrl: burzaUrl,
|
burzaUrl: burzaUrl,
|
||||||
naBurze:
|
naBurze:
|
||||||
(burzaUrl == null) ? false : !burzaUrl.contains("plusburza"),
|
(burzaUrl == null) ? false : burzaUrl.contains("minusburza"),
|
||||||
alergeny: [...alergeny.map((e) => e.group(1).toString())]),
|
alergeny: alergeny),
|
||||||
);
|
);
|
||||||
// KONEC formátování do třídy
|
// KONEC formátování do třídy
|
||||||
}
|
}
|
||||||
|
@ -394,7 +409,7 @@ class Canteen {
|
||||||
///
|
///
|
||||||
/// Výstup:
|
/// Výstup:
|
||||||
/// - Aktualizovaná instance [Jidlo] tohoto jídla NEBO [Future] jako chyba
|
/// - Aktualizovaná instance [Jidlo] tohoto jídla NEBO [Future] jako chyba
|
||||||
Future<Jidlo> doBurzy(Jidlo j) async {
|
Future<Jidlo> doBurzy(Jidlo j, {int amount = 1}) async {
|
||||||
if (!prihlasen) {
|
if (!prihlasen) {
|
||||||
return Future.error("Uživatel není přihlášen");
|
return Future.error("Uživatel není přihlášen");
|
||||||
}
|
}
|
||||||
|
@ -404,8 +419,13 @@ class Canteen {
|
||||||
"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í");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (amount < 1 && j.burzaUrl!.endsWith("amount=")) {
|
||||||
|
return Future.error("Nemůžeš dát do burzy méně než jeden kus");
|
||||||
|
}
|
||||||
|
var finalUrl =
|
||||||
|
(j.burzaUrl!.endsWith("amount=")) ? "${j.burzaUrl}$amount" : j.burzaUrl;
|
||||||
try {
|
try {
|
||||||
await _getRequest("/faces/secured/${j.burzaUrl!}"); // provést operaci
|
await _getRequest("/faces/secured/$finalUrl"); // provést operaci
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return Future.error(e);
|
return Future.error(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ class Jidlo {
|
||||||
/// Seznam alergenů
|
/// Seznam alergenů
|
||||||
///
|
///
|
||||||
/// Pokud se žádný nepodařilo najít, vrací prázdný seznam
|
/// Pokud se žádný nepodařilo najít, vrací prázdný seznam
|
||||||
List<String> alergeny;
|
List<Alergen> alergeny;
|
||||||
|
|
||||||
/// URL pro požadavek na objednání jídla
|
/// URL pro požadavek na objednání jídla
|
||||||
final String? orderUrl;
|
final String? orderUrl;
|
||||||
|
@ -44,6 +44,15 @@ class Jidlo {
|
||||||
required this.naBurze});
|
required this.naBurze});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Popisuje alergen v jídelníčku
|
||||||
|
class Alergen {
|
||||||
|
final int kod;
|
||||||
|
final String nazev;
|
||||||
|
final String? popis;
|
||||||
|
|
||||||
|
const Alergen({required this.nazev, required this.kod, this.popis});
|
||||||
|
}
|
||||||
|
|
||||||
/// Reprezentuje cizí jídlo na burze
|
/// Reprezentuje cizí jídlo na burze
|
||||||
class Burza {
|
class Burza {
|
||||||
/// Den, který je jídlo vydáváno
|
/// Den, který je jídlo vydáváno
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: canteenlib
|
name: canteenlib
|
||||||
description: Library for communication with the czech canteen food ordering system iCanteen
|
description: Library for communication with the czech canteen food ordering system iCanteen
|
||||||
version: 1.1.2
|
version: 2.0.0
|
||||||
repository: 'https://git.mnau.xyz/hernik/canteenlib'
|
repository: 'https://git.mnau.xyz/hernik/canteenlib'
|
||||||
issue_tracker: 'https://git.mnau.xyz/hernik/canteenlib/issues'
|
issue_tracker: 'https://git.mnau.xyz/hernik/canteenlib/issues'
|
||||||
|
|
||||||
|
|
Reference in a new issue