1import { Actor } from 'apify';
2
3export class Utils {
4
5 static parseDate(input) {
6
7
8 const filenameMatch = input.match(/(\d{2})(\d{2})(\d{4})\.pdf/);
9 if (filenameMatch?.length === 4) {
10 const day = parseInt(filenameMatch[1]);
11 const month = parseInt(filenameMatch[2]);
12 const year = parseInt(filenameMatch[3]);
13
14 const parsedDate = new Date(year, month - 1, day);
15 return new Validity(parsedDate);
16 }
17
18 return null;
19 }
20
21 static isSameDay(a, b) {
22 return a.getDate() === b.getDate() && a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear();
23 }
24
25 static getResult(validity) {
26 const { date } = validity;
27
28 var result = {
29 Date: `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`,
30 From: validity.startTime,
31 To: validity.endTime,
32 };
33
34 return result;
35 }
36
37 static parseDateTimeFromText(text) {
38
39
40
41 const dateTimeMatch = text.match(/(\d{1,2})\.(\d{1,2})\.(\d{4})\s+(\d{1,2}):(\d{2})\s*-\s*(\d{1,2}):(\d{2})/);
42
43 if (dateTimeMatch?.length === 8) {
44 const day = parseInt(dateTimeMatch[1]);
45 const month = parseInt(dateTimeMatch[2]);
46 const year = parseInt(dateTimeMatch[3]);
47 const startHour = parseInt(dateTimeMatch[4]);
48 const startMinute = parseInt(dateTimeMatch[5]);
49 const endHour = parseInt(dateTimeMatch[6]);
50 const endMinute = parseInt(dateTimeMatch[7]);
51
52
53 const startDate = new Date(year, month - 1, day, startHour, startMinute);
54
55 return {
56 date: startDate,
57 startTime: `${startHour.toString().padStart(2, '0')}:${startMinute.toString().padStart(2, '0')}`,
58 endTime: `${endHour.toString().padStart(2, '0')}:${endMinute.toString().padStart(2, '0')}`
59 };
60 }
61
62 return null;
63 }
64
65 static async handleResult(result) {
66 await Actor.pushData(Utils.getResult(result));
67
68 if (Utils.isSameDay(result.date, new Date())) {
69
70 const { email: emailsData } = await Actor.getInput();
71
72 if (emailsData) {
73 for (const emailData of emailsData) {
74 await Utils.sendEmail(emailData, result);
75 }
76 }
77
78 }
79 }
80
81 static async sendEmail(emailData, result) {
82
83 let subject = `Kaktus dobíječka dnes`;
84
85 if (result.startTime && result.endTime) {
86 subject = `${subject} ${result.startTime} - ${result.endTime}`;
87 }
88
89 await Actor.call('apify/send-mail', {
90 to: emailData.to,
91 cc: emailData.cc,
92 bcc: emailData.bcc,
93 subject: subject,
94 html: 'Podívat se na <a href="https://www.mujkaktus.cz/chces-pridat">web</a>',
95 });
96
97 }
98
99}
100
101export class Validity {
102 constructor(date) {
103 this.date = date;
104 }
105
106}