Groom  1.1
BTS SNIR LaSalle Avignon 2021
Référence de la classe Calendrier

Déclaration de la classe Calendrier. Plus de détails...

#include <Calendrier.h>

Graphe de collaboration de Calendrier:
Collaboration graph

Connecteurs publics

void handleHTTPError ()
 
void recharger ()
 
void traiterRequete ()
 

Signaux

void effacement ()
 
void erreur (QString erreur, QString couleur="red")
 
void forcerSynchronisation ()
 
void message (QString message, QString couleur="green")
 
void nouvelEvenement (QString evt, QString couleur="blue")
 

Fonctions membres publiques

 Calendrier (QObject *parent=nullptr)
 
void charger ()
 
QList< EvenementgetEvenements (QDate date) const
 
QString getHostURL (void) const
 
QString getNom (void) const
 
int getRequeteTimeoutMS (void) const
 
bool setHostURL (const QString hostURL)
 
bool setHostURL (const QUrl hostURL)
 
void setNom (QString nom)
 
void setRequeteTimeoutMS (const int requestTimeoutMS)
 
void telecharger ()
 
 ~Calendrier ()
 

Fonctions membres privées

QString asciiToUtf8 (QString str)
 
QString encoderBase64 (QString string)
 
void traiterCalendrier ()
 
void traiterEvenement ()
 

Attributs privés

QTextStream * contenuCalendrier
 
EtatCalendrier etatCalendrier
 
QList< Evenementevenements
 
QUrl hostURL
 
QNetworkAccessManager networkManager
 
QNetworkReply * networkReply
 
QString nom
 
int requeteTimeoutMS
 
QTimer requeteTimeoutTimer
 
QTimer synchronisationTimer
 

Description détaillée

Déclaration de la classe Calendrier.

Cette classe permet de gérer un calendrier au format iCal

Définition à la ligne 38 du fichier Calendrier.h.

Documentation des constructeurs et destructeur

◆ Calendrier()

Calendrier::Calendrier ( QObject parent = nullptr)
explicit

Définition à la ligne 13 du fichier Calendrier.cpp.

13  : QObject(parent), hostURL(""), nom(""), contenuCalendrier(nullptr), networkReply(nullptr), requeteTimeoutMS(2000)
14 {
15  qDebug() << __FUNCTION__;
16  synchronisationTimer.setSingleShot(true);
17  synchronisationTimer.setInterval(1000);
18  requeteTimeoutTimer.setSingleShot(true);
19 
20  connect(&synchronisationTimer, SIGNAL(timeout()), this, SLOT(recharger()));
21 }

Références recharger(), requeteTimeoutTimer, et synchronisationTimer.

◆ ~Calendrier()

Calendrier::~Calendrier ( )

Définition à la ligne 23 du fichier Calendrier.cpp.

24 {
25  synchronisationTimer.stop();
26  qDebug() << __FUNCTION__;
27 }

Références synchronisationTimer.

Documentation des fonctions membres

◆ asciiToUtf8()

QString Calendrier::asciiToUtf8 ( QString  str)
private

Définition à la ligne 383 du fichier Calendrier.cpp.

384 {
385  return QString::fromUtf8(str.toLocal8Bit().data());
386 }

Référencé par traiterEvenement().

◆ charger()

void Calendrier::charger ( )

Définition à la ligne 100 du fichier Calendrier.cpp.

101 {
102  qDebug() << __FUNCTION__ << nom << hostURL << "local ?" << hostURL.isLocalFile();
103  emit effacement();
104  if(hostURL.isLocalFile())
105  {
106  QString filename = hostURL.toString().remove("file:///");
107  qDebug() << __FUNCTION__ << nom << hostURL << "relative ?" << QUrl(filename).isRelative();
108  if (QUrl(filename).isRelative())
109  {
110  filename = filename.prepend("/");
111  }
112  filename = QUrl(filename).toString(QUrl::NormalizePathSegments);
113  qDebug() << __FUNCTION__ << nom << filename;
114 
115  QFile file(filename);
116 
117  if (file.exists())
118  {
119  if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
120  {
121  qDebug() << __FUNCTION__ << nom << filename << file.errorString();
122  emit erreur("Erreur : impossible de lire le fichier !");
123  return;
124  }
125  }
126  else
127  {
128  qDebug() << __FUNCTION__ << nom << filename << "Erreur : fichier introuvable !";
129  emit erreur("Erreur : fichier introuvable !");
130  return;
131  }
132 
134  {
135  delete contenuCalendrier;
136  }
137  contenuCalendrier = new QTextStream(&file);
138 
139  evenements.clear();
140  bool trouve = false;
141 
142  do
143  {
144  QString line = contenuCalendrier->readLine();
145  //qDebug() << __FUNCTION__ << nom << line;
146  if(!line.isNull())
147  {
148  if (line.startsWith("X-WR-CALNAME"))
149  {
150  qDebug() << __FUNCTION__ << nom << line;
151  QString nomCalendrier = line.trimmed();
152  nomCalendrier.remove(";LANGUAGE=fr", Qt::CaseInsensitive);
153  nomCalendrier.remove("X-WR-CALNAME:", Qt::CaseInsensitive);
154  qDebug() << __FUNCTION__ << nom << nomCalendrier;
155  this->setNom(nomCalendrier);
156  emit message("Calendrier : " + nomCalendrier);
157  trouve = true;
158  }
159  }
160  }
161  while (!contenuCalendrier->atEnd() && !trouve);
162  contenuCalendrier->seek(0);
163 
165  }
166  else
167  {
168  telecharger();
169  }
170 }

Références contenuCalendrier, effacement(), erreur(), evenements, hostURL, message(), nom, setNom(), telecharger(), et traiterCalendrier().

Référencé par IHMGroom::ouvrirFichier(), IHMGroom::ouvrirURL(), et recharger().

◆ effacement

void Calendrier::effacement ( )
signal

Référencé par charger().

◆ encoderBase64()

QString Calendrier::encoderBase64 ( QString  string)
private

Définition à la ligne 376 du fichier Calendrier.cpp.

377 {
378  QByteArray ba;
379  ba.append(string);
380  return ba.toBase64();
381 }

◆ erreur

void Calendrier::erreur ( QString  erreur,
QString  couleur = "red" 
)
signal

◆ forcerSynchronisation

void Calendrier::forcerSynchronisation ( )
signal

◆ getEvenements()

QList< Evenement > Calendrier::getEvenements ( QDate  date) const

Définition à la ligne 76 du fichier Calendrier.cpp.

77 {
78  qDebug() << __FUNCTION__ << date;
79  QList<Evenement> listeEvenements;
80  bool ok;
81  foreach(Evenement evt, evenements)
82  {
83  QString dtstart = evt.getAttribut("dtstart");
84  QDateTime dtStart = Evenement::convertirHorodatage(dtstart, ok);
85  QString dtend = evt.getAttribut("dtend");
86  QDateTime dtEnd = Evenement::convertirHorodatage(dtend, ok);
87  if (dtStart.isValid() && dtEnd.isValid())
88  {
89  if(date >= dtStart.date() && date <= dtEnd.date())
90  {
91  listeEvenements.append(evt);
92  }
93  }
94  }
95  qDebug() << __FUNCTION__ << date << "nb evenements : " << listeEvenements.size();
96 
97  return listeEvenements;
98 }

Références Evenement::convertirHorodatage(), evenements, et Evenement::getAttribut().

Référencé par IHMGroom::selectionnerDate().

◆ getHostURL()

QString Calendrier::getHostURL ( void  ) const

Définition à la ligne 48 du fichier Calendrier.cpp.

49 {
50  return this->hostURL.toString();
51 }

Références hostURL.

◆ getNom()

QString Calendrier::getNom ( void  ) const

Définition à la ligne 53 du fichier Calendrier.cpp.

54 {
55  return this->nom;
56 }

Références nom.

◆ getRequeteTimeoutMS()

int Calendrier::getRequeteTimeoutMS ( void  ) const

Définition à la ligne 63 du fichier Calendrier.cpp.

64 {
65  return this->requeteTimeoutMS;
66 }

Références requeteTimeoutMS.

◆ handleHTTPError

void Calendrier::handleHTTPError ( )
slot

Définition à la ligne 359 du fichier Calendrier.cpp.

360 {
362  //emit syncStateChanged(etatCalendrier);
363  requeteTimeoutTimer.stop();
364  if (networkReply != nullptr)
365  {
366  qDebug() << __FUNCTION__ << nom << "Erreur : requête HTTP !" << networkReply->errorString();
367  emit erreur(networkReply->errorString());
368  }
369  else
370  {
371  qDebug() << __FUNCTION__ << nom << "Erreur : réponse invalide !";
372  emit erreur("Erreur : réponse invalide !");
373  }
374 }

Références E_STATE_ERROR, erreur(), etatCalendrier, networkReply, nom, et requeteTimeoutTimer.

Référencé par telecharger().

◆ message

void Calendrier::message ( QString  message,
QString  couleur = "green" 
)
signal

◆ nouvelEvenement

void Calendrier::nouvelEvenement ( QString  evt,
QString  couleur = "blue" 
)
signal

Référencé par traiterEvenement().

◆ recharger

void Calendrier::recharger ( )
slot

Définition à la ligne 210 du fichier Calendrier.cpp.

211 {
212  this->charger();
213 }

Références charger().

Référencé par Calendrier().

◆ setHostURL() [1/2]

bool Calendrier::setHostURL ( const QString  hostURL)

Définition à la ligne 29 du fichier Calendrier.cpp.

30 {
31  QUrl url(hostURL);
32  return setHostURL(url);
33 }

Références hostURL.

Référencé par IHMGroom::ouvrirFichier(), et IHMGroom::ouvrirURL().

◆ setHostURL() [2/2]

bool Calendrier::setHostURL ( const QUrl  hostURL)

Définition à la ligne 35 du fichier Calendrier.cpp.

36 {
37  bool ret = false;
38 
39  if (hostURL.isValid() != false)
40  {
41  this->hostURL = hostURL;
42  ret = true;
43  }
44 
45  return ret;
46 }

Références hostURL.

◆ setNom()

void Calendrier::setNom ( QString  nom)

Définition à la ligne 58 du fichier Calendrier.cpp.

59 {
60  this->nom = nom;
61 }

Références nom.

Référencé par charger(), et traiterRequete().

◆ setRequeteTimeoutMS()

void Calendrier::setRequeteTimeoutMS ( const int  requestTimeoutMS)

Définition à la ligne 68 du fichier Calendrier.cpp.

69 {
70  if (requeteTimeoutMS > 0)
71  {
73  }
74 }

Références requeteTimeoutMS.

◆ telecharger()

void Calendrier::telecharger ( )

Définition à la ligne 172 du fichier Calendrier.cpp.

173 {
174  qDebug() << __FUNCTION__ << nom;
175 
176  if (networkReply != nullptr)
177  {
178  networkReply->abort();
179  networkReply->disconnect();
180  }
181 
182  QNetworkRequest requete;
183  requete.setUrl(hostURL);
184  requete.setRawHeader("User-Agent", "CalendarClient_ICS");
185  requete.setRawHeader("Depth", "0");
186  requete.setRawHeader("Prefer", "return-minimal");
187  requete.setRawHeader("Content-Type", "text/xml; charset=utf-8");
188  requete.setRawHeader("Content-Length", "0");
189 
190  QSslConfiguration configuration = requete.sslConfiguration();
191  configuration.setPeerVerifyMode(QSslSocket::VerifyNone);
192  requete.setSslConfiguration(configuration);
193 
194  networkReply = networkManager.get(requete);
195 
196  if (networkReply != nullptr)
197  {
198  connect(networkReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(handleHTTPError()));
199  connect(networkReply, SIGNAL(finished()), this, SLOT(traiterRequete()));
200 
202  }
203  else
204  {
205  qDebug() << __FUNCTION__ << nom << "Erreur : réponse invalide !";
206  emit erreur("Erreur : réponse invalide !");
207  }
208 }

Références erreur(), handleHTTPError(), hostURL, networkManager, networkReply, nom, requeteTimeoutMS, requeteTimeoutTimer, et traiterRequete().

Référencé par charger().

◆ traiterCalendrier()

void Calendrier::traiterCalendrier ( )
private

Définition à la ligne 274 du fichier Calendrier.cpp.

275 {
276  QString ligne = contenuCalendrier->readLine();
277 
278  while(ligne.isNull() == false)
279  {
280  if(ligne.contains("BEGIN:VEVENT") != false)
281  {
283  }
284  ligne = contenuCalendrier->readLine();
285  }
286  emit message(QString::fromUtf8("Nb évènement(s) : ") + QString::number(evenements.size()));
287  qDebug() << __FUNCTION__ << nom << "nb evenements : " << evenements.size();
288 }

Références contenuCalendrier, evenements, message(), nom, et traiterEvenement().

Référencé par charger(), et traiterRequete().

◆ traiterEvenement()

void Calendrier::traiterEvenement ( )
private

Définition à la ligne 290 du fichier Calendrier.cpp.

291 {
292  Evenement evenement(this);
293  QString ligne;
294  QDateTime utcTime;
295  bool ok;
296 
297  qDebug() << __FUNCTION__ << nom;
298  evenement.setAttribut("utilisateur du calendrier", nom);
299 
300  while (!(ligne = contenuCalendrier->readLine()).contains(QByteArray("END:VEVENT")))
301  {
302  ligne.remove(";LANGUAGE=fr", Qt::CaseInsensitive);
303  const int delimiteur = ligne.indexOf(QLatin1Char(':'));
304  const QString key = ligne.mid(0, delimiteur);
305  QString value = (ligne.mid(delimiteur + 1, -1).replace("\\n", "\n")); //.toLatin1();
306  QString testEncodingString = asciiToUtf8(value);
307  if (testEncodingString.contains("�") == false)
308  {
309  value = testEncodingString;
310  }
311 
312  if (key.startsWith(QLatin1String("DTSTART")))
313  {
314  utcTime = Evenement::convertirHorodatage(value, ok);
315  if (utcTime.isValid())
316  evenement.setAttribut("dtstart", value);
317  }
318  else if (key.startsWith(QLatin1String("DTEND")))
319  {
320  utcTime = Evenement::convertirHorodatage(value, ok);
321  if (utcTime.isValid())
322  evenement.setAttribut("dtend", value);
323  }
324  /*else if (key == QLatin1String("RRULE"))
325  {
326  //event.setRRULE(value);
327  }
328  else if (key == QLatin1String("EXDATE"))
329  {
330  //event.setExdates(value);
331  }*/
332  else if (key == QLatin1String("SUMMARY"))
333  {
334  evenement.setAttribut("summary", value);
335  }
336  else if (key == QLatin1String("LOCATION"))
337  {
338  evenement.setAttribut("location", value);
339  }
340  else if (key == QLatin1String("UID"))
341  {
342  evenement.setAttribut("uid", value);
343  }
344  else if (key == QLatin1String("CATEGORIES"))
345  {
346  evenement.setAttribut("categories", value);
347  }
348  else if (key == QLatin1String("DESCRIPTION"))
349  {
350  evenement.setAttribut("description", value);
351  }
352  }
353 
354  evenements.append(evenement);
355  emit nouvelEvenement(QString::fromUtf8("Évènement : ") + evenement.toString());
356  //qDebug() << __FUNCTION__ << nom << evenement;
357 }

Références asciiToUtf8(), contenuCalendrier, Evenement::convertirHorodatage(), evenements, nom, nouvelEvenement(), Evenement::setAttribut(), et Evenement::toString().

Référencé par traiterCalendrier().

◆ traiterRequete

void Calendrier::traiterRequete ( )
slot

Définition à la ligne 215 du fichier Calendrier.cpp.

216 {
217  requeteTimeoutTimer.stop();
218 
220  {
221  qDebug() << __FUNCTION__ << nom << "Erreur !";
222  }
223 
224  qDebug() << __FUNCTION__ << nom << "Requête terminée";
225 
226  if (networkReply != nullptr)
227  {
228  QBuffer buffer(this);
229  buffer.setData(networkReply->readAll());
230 
231  buffer.open(QIODevice::ReadOnly);
232  bool trouve = false;
233  do
234  {
235  QString ligne = buffer.readLine();
236  if (!ligne.isNull())
237  {
238  if (ligne.startsWith("X-WR-CALNAME"))
239  {
240  qDebug() << __FUNCTION__ << nom << ligne;
241  QString nomCalendrier = ligne.trimmed();
242  nomCalendrier.remove(";LANGUAGE=fr", Qt::CaseInsensitive);
243  nomCalendrier.remove("X-WR-CALNAME:", Qt::CaseInsensitive);
244  qDebug() << __FUNCTION__ << nom << nomCalendrier;
245  this->setNom(nomCalendrier);
246  emit message("Calendrier : " + nomCalendrier);
247  trouve = true;
248  }
249  }
250  }
251  while (!buffer.atEnd() && !trouve);
252  buffer.seek(0);
253  buffer.close();
254 
255  if (contenuCalendrier)
256  {
257  delete contenuCalendrier;
258  }
259  contenuCalendrier = new QTextStream(buffer.data());
260 
261  evenements.clear();
262 
264 
265  synchronisationTimer.start();
266  }
267  else
268  {
269  qDebug() << __FUNCTION__ << nom << "Erreur : réponse invalide !";
270  emit erreur("Erreur : réponse invalide !");
271  }
272 }

Références contenuCalendrier, E_STATE_ERROR, erreur(), etatCalendrier, evenements, message(), networkReply, nom, requeteTimeoutTimer, setNom(), synchronisationTimer, et traiterCalendrier().

Référencé par telecharger().

Documentation des données membres

◆ contenuCalendrier

QTextStream* Calendrier::contenuCalendrier
private

Définition à la ligne 45 du fichier Calendrier.h.

Référencé par charger(), traiterCalendrier(), traiterEvenement(), et traiterRequete().

◆ etatCalendrier

EtatCalendrier Calendrier::etatCalendrier
private

Définition à la ligne 50 du fichier Calendrier.h.

Référencé par handleHTTPError(), et traiterRequete().

◆ evenements

QList<Evenement> Calendrier::evenements
private

Définition à la ligne 51 du fichier Calendrier.h.

Référencé par charger(), getEvenements(), traiterCalendrier(), traiterEvenement(), et traiterRequete().

◆ hostURL

QUrl Calendrier::hostURL
private

Définition à la ligne 42 du fichier Calendrier.h.

Référencé par charger(), getHostURL(), setHostURL(), et telecharger().

◆ networkManager

QNetworkAccessManager Calendrier::networkManager
private

Définition à la ligne 46 du fichier Calendrier.h.

Référencé par telecharger().

◆ networkReply

QNetworkReply* Calendrier::networkReply
private

Définition à la ligne 47 du fichier Calendrier.h.

Référencé par handleHTTPError(), telecharger(), et traiterRequete().

◆ nom

QString Calendrier::nom
private

◆ requeteTimeoutMS

int Calendrier::requeteTimeoutMS
private

Définition à la ligne 49 du fichier Calendrier.h.

Référencé par getRequeteTimeoutMS(), setRequeteTimeoutMS(), et telecharger().

◆ requeteTimeoutTimer

QTimer Calendrier::requeteTimeoutTimer
private

Définition à la ligne 48 du fichier Calendrier.h.

Référencé par Calendrier(), handleHTTPError(), telecharger(), et traiterRequete().

◆ synchronisationTimer

QTimer Calendrier::synchronisationTimer
private

Définition à la ligne 44 du fichier Calendrier.h.

Référencé par Calendrier(), traiterRequete(), et ~Calendrier().


La documentation de cette classe a été générée à partir des fichiers suivants :
Calendrier::asciiToUtf8
QString asciiToUtf8(QString str)
Definition: Calendrier.cpp:383
Calendrier::nom
QString nom
Definition: Calendrier.h:43
Calendrier::nouvelEvenement
void nouvelEvenement(QString evt, QString couleur="blue")
Calendrier::contenuCalendrier
QTextStream * contenuCalendrier
Definition: Calendrier.h:45
Calendrier::etatCalendrier
EtatCalendrier etatCalendrier
Definition: Calendrier.h:50
E_STATE_ERROR
@ E_STATE_ERROR
Definition: Calendrier.h:30
Calendrier::message
void message(QString message, QString couleur="green")
Calendrier::setNom
void setNom(QString nom)
Definition: Calendrier.cpp:58
Evenement::getAttribut
QString getAttribut(QString nomAttribut) const
Definition: Evenement.cpp:65
Calendrier::traiterRequete
void traiterRequete()
Definition: Calendrier.cpp:215
Calendrier::synchronisationTimer
QTimer synchronisationTimer
Definition: Calendrier.h:44
Calendrier::charger
void charger()
Definition: Calendrier.cpp:100
Calendrier::hostURL
QUrl hostURL
Definition: Calendrier.h:42
Calendrier::requeteTimeoutMS
int requeteTimeoutMS
Definition: Calendrier.h:49
Evenement
Déclaration de la classe Evenement.
Definition: Evenement.h:36
Calendrier::handleHTTPError
void handleHTTPError()
Definition: Calendrier.cpp:359
Calendrier::traiterEvenement
void traiterEvenement()
Definition: Calendrier.cpp:290
Calendrier::networkManager
QNetworkAccessManager networkManager
Definition: Calendrier.h:46
Calendrier::recharger
void recharger()
Definition: Calendrier.cpp:210
Evenement::convertirHorodatage
static QDateTime convertirHorodatage(QString horodatage, bool &ok)
Definition: Evenement.cpp:87
Calendrier::telecharger
void telecharger()
Definition: Calendrier.cpp:172
Calendrier::networkReply
QNetworkReply * networkReply
Definition: Calendrier.h:47
Calendrier::evenements
QList< Evenement > evenements
Definition: Calendrier.h:51
Calendrier::traiterCalendrier
void traiterCalendrier()
Definition: Calendrier.cpp:274
QObject
Calendrier::setHostURL
bool setHostURL(const QString hostURL)
Definition: Calendrier.cpp:29
Calendrier::requeteTimeoutTimer
QTimer requeteTimeoutTimer
Definition: Calendrier.h:48
Calendrier::erreur
void erreur(QString erreur, QString couleur="red")
Calendrier::effacement
void effacement()