Oprava parsování pro TechTower

This commit is contained in:
Martin Berka 2023-10-23 12:24:32 +02:00
parent c5103f902d
commit 3021e6159d
2 changed files with 36 additions and 35 deletions

View File

@ -360,6 +360,7 @@ function App() {
<ul> <ul>
<li>Parsování jídelních lístků na celý týden</li> <li>Parsování jídelních lístků na celý týden</li>
<li>Oprava mizejícího Pizza day</li> <li>Oprava mizejícího Pizza day</li>
<li>Oprava parsování celého týdne pro TechTower</li>
</ul> </ul>
</Alert> </Alert>
{dayIndex != null && {dayIndex != null &&

View File

@ -235,25 +235,23 @@ export const getMenuTechTower = async (firstDayOfWeek: Date, mock: boolean = fal
if (!font) { if (!font) {
throw Error('Chyba: nenalezen <font> pro obědy v HTML Techtower.'); throw Error('Chyba: nenalezen <font> pro obědy v HTML Techtower.');
} }
const result: Food[][] = [];
// TODO validovat, že v textu nalezeného <font> je rozsah, do kterého spadá vstupní datum // TODO validovat, že v textu nalezeného <font> je rozsah, do kterého spadá vstupní datum
const siblings = $(font).parent().parent().siblings(); const siblings = $(font).parent().parent().siblings();
let parsing = false; let parsing = false;
const result: Food[][] = []; let currentDayIndex = 0;
// TODO toto je kvůli poslednímu "línému" refaktoru neoptimální, stačilo by to projít jedním cyklem
for (let dayIndex = 0; dayIndex < 5; dayIndex++) {
if (!(dayIndex in result)) {
result[dayIndex] = [];
}
for (let i = 0; i < siblings.length; i++) { for (let i = 0; i < siblings.length; i++) {
const text = $(siblings.get(i)).text().trim().replace('\t', '').replace('\n', ' '); const text = $(siblings.get(i)).text().trim().replace('\t', '').replace('\n', ' ');
if (DAYS_IN_WEEK.includes(text)) { if (DAYS_IN_WEEK.includes(text)) {
if (text === DAYS_IN_WEEK[dayIndex]) { if (text === DAYS_IN_WEEK[currentDayIndex]) {
// Našli jsme dnešní den, odtud začínáme parsovat jídla // Našli jsme dnešní den, odtud začínáme parsovat jídla
parsing = true; parsing = true;
continue continue
} else if (parsing) { } else if (parsing) {
// Už parsujeme jídla, ale narazili jsme na následující den - končíme // Už parsujeme jídla, ale narazili jsme na následující den - posouváme index
break; currentDayIndex += 1;
continue;
} }
} else if (parsing) { } else if (parsing) {
if (text.length == 0) { if (text.length == 0) {
@ -268,7 +266,10 @@ export const getMenuTechTower = async (firstDayOfWeek: Date, mock: boolean = fal
price = `${split.slice(1)[0]}\xA0Kč` price = `${split.slice(1)[0]}\xA0Kč`
name = split[0] name = split[0]
} }
result[dayIndex].push({ if (result[currentDayIndex] == null) {
result[currentDayIndex] = [];
}
result[currentDayIndex].push({
amount: '-', amount: '-',
name, name,
price, price,
@ -276,6 +277,5 @@ export const getMenuTechTower = async (firstDayOfWeek: Date, mock: boolean = fal
}) })
} }
} }
}
return result; return result;
} }