void HeadlessApplication::parseMessageListing(bool read, const QString &threadListing) { PrivateMessageListItem *item = new PrivateMessageListItem(); QRegExp andAmp("&"); QRegExp quote("""); QRegExp euro("€"); QRegExp inf("<"); QRegExp sup(">"); QRegExp nbsp(" "); QString SubjectNumber; item->setRead(read); //qDebug() << threadListing; QRegExp addresseeRegexp("<td class=\"sujetCase6 cBackCouleurTab[0-9] \"><a rel=\"nofollow\" href=\"[^\"]+pseudo=([^\"]+)\" class=\"Tableau\">([^\"]+)</a></td>"); addresseeRegexp.setCaseSensitivity(Qt::CaseSensitive); //addresseeRegexp.setMinimal(true); if(addresseeRegexp.indexIn(threadListing, 0) != -1) { item->setAddressee(addresseeRegexp.cap(1)); //qDebug() << addresseeRegexp.cap(1) << addresseeRegexp.cap(2) << addresseeRegexp.cap(0) ; } else { item->deleteLater(); return; } QRegExp addresseeRead("<span class=\"red\" title"); addresseeRead.setCaseSensitivity(Qt::CaseSensitive); addresseeRead.setMinimal(true); if(addresseeRead.indexIn(threadListing, 0) != -1) item->setAddresseeRead(false); else item->setAddresseeRead(true); QRegExp mpTitle("class=\"sujetCase3\".*<a href=\"(.+)\" class=\"cCatTopic\" title=\"Sujet n.([0-9]+)\">(.+)</a></td><td class=\"sujetCase4\">"); mpTitle.setCaseSensitivity(Qt::CaseSensitive); mpTitle.setMinimal(true); if(mpTitle.indexIn(threadListing, 0) != -1) { QString s = mpTitle.cap(3); SubjectNumber = mpTitle.cap(2); s.replace(andAmp, "&"); s.replace(quote,"\""); s.replace(euro, "e"); s.replace(inf, "<"); s.replace(sup, ">"); item->setTitle(s); s = mpTitle.cap(1); s.replace(andAmp, "&"); item->setUrlFirstPage(s); } QRegExp lastPostInfo("<td class=\"sujetCase9 cBackCouleurTab[0-9] \"><a href=\"(.+)\" class=\"Tableau\">(.+)<br /><b>(.+)</b></a></td><td class=\"sujetCase10\">"); lastPostInfo.setCaseSensitivity(Qt::CaseSensitive); lastPostInfo.setMinimal(true); if(lastPostInfo.indexIn(threadListing, 0) != -1) { QString s = lastPostInfo.cap(1); s.replace(andAmp, "&"); item->setUrlLastPage(s); s = lastPostInfo.cap(2); s.replace(nbsp, " "); item->setTimestamp(s); item->setLastAuthor(lastPostInfo.cap(3)); } qint64 timestamp = QDateTime::fromString(item->getTimestamp().mid(0,10) + " " + item->getTimestamp().mid(13), "dd-MM-yyyy hh:mm").toMSecsSinceEpoch(); // ----------------------------------------------------- // items already into the hub QVariantList hubItems = m_Hub->items(); QVariantMap itemMap; bool existing = false; for(int i = 0 ; i < hubItems.length() ; ++i) { itemMap = hubItems.at(i).toMap(); if(itemMap["syncId"].toString() == SubjectNumber) { existing = true; break; } } qDebug() << "Current item: " << SubjectNumber << " existing: " << existing << " id: src:" << itemMap["sourceId"].toLongLong() << " msg: " << itemMap["messageid"].toString(); if(existing) { qDebug() << "Current item time: " << itemMap["timestamp"].toULongLong() << " new time: " << timestamp; if(itemMap["timestamp"].toULongLong() == timestamp) { item->deleteLater(); return; } qDebug() << "update item. isAddresseeRead: " << item->isAddresseeRead() << " isRead: " << item->isRead(); itemMap["description"] = item->getTitle(); itemMap["timestamp"] = timestamp; itemMap["readCount"] = item->isRead(); itemMap["url"] = item->getUrlLastPage(); qint64 itemId; if (itemMap["sourceId"].toString().length() > 0) { itemId = itemMap["sourceId"].toLongLong(); } else if (itemMap["messageid"].toString().length() > 0) { itemId = itemMap["messageid"].toLongLong(); } if(item->isRead()) { itemMap["readCount"] = 0; } qDebug() << "item id: " << itemId; m_Hub->updateHubItem(m_Hub->categoryId(), itemId, itemMap, item->isRead()); if(!item->isRead()) { qDebug() << "updated mark item as read."; m_Hub->markHubItemRead(m_Hub->categoryId(), itemId); } } else { qDebug() << "new item!"; QVariantMap entry; if(!item->getUrlLastPage().isEmpty()) entry["url"] = item->getUrlLastPage(); else { if(!item->getUrlFirstPage().isEmpty()) entry["url"] = item->getUrlFirstPage(); else { item->deleteLater(); return; } } qDebug() << "insert item into hub"; m_Hub->addHubItem(m_Hub->categoryId(), entry, item->getAddressee(), item->getTitle(), timestamp, SubjectNumber, SubjectNumber, "", item->isRead()); qint64 itemId; if (entry["sourceId"].toString().length() > 0) { itemId = entry["sourceId"].toLongLong(); } else if (entry["messageid"].toString().length() > 0) { itemId = entry["messageid"].toLongLong(); } qDebug() << "new item id: " << itemId; if(!item->isRead()) { qDebug() << "mark new item as already read."; m_Hub->markHubItemRead(m_Hub->categoryId(), itemId); } } item->deleteLater(); }
void PrivateMessageController::parseMessageListing(bool read, const QString &threadListing) { PrivateMessageListItem *item = new PrivateMessageListItem(); QRegExp andAmp("&"); QRegExp quote("""); QRegExp euro("€"); QRegExp inf("<"); QRegExp sup(">"); QRegExp nbsp(" "); item->setRead(read); QRegExp addresseeRegexp("<td class=\"sujetCase6 cBackCouleurTab[0-9] \"><a rel=\"nofollow\" href=\"[^\"]+pseudo=([^\"]+)\""); addresseeRegexp.setCaseSensitivity(Qt::CaseSensitive); addresseeRegexp.setMinimal(true); if(addresseeRegexp.indexIn(threadListing, 0) != -1) { item->setAddressee(addresseeRegexp.cap(1)); } else { item->deleteLater(); return; } QRegExp addresseeRead("<span class=\"red\" title"); addresseeRead.setCaseSensitivity(Qt::CaseSensitive); addresseeRead.setMinimal(true); if(addresseeRead.indexIn(threadListing, 0) != -1) item->setAddresseeRead(false); else item->setAddresseeRead(true); QRegExp mpTitle("class=\"sujetCase3\".*<a href=\"(.+)\" class=\"cCatTopic\" title=\"Sujet n.[0-9]+\">(.+)</a></td><td class=\"sujetCase4\">"); mpTitle.setCaseSensitivity(Qt::CaseSensitive); mpTitle.setMinimal(true); if(mpTitle.indexIn(threadListing, 0) != -1) { QString s = mpTitle.cap(2); s.replace(andAmp, "&"); s.replace(quote,"\""); s.replace(euro, "e"); s.replace(inf, "<"); s.replace(sup, ">"); item->setTitle(s); s = mpTitle.cap(1); s.replace(andAmp, "&"); item->setUrlFirstPage(s); } QRegExp lastPostInfo("<td class=\"sujetCase9 cBackCouleurTab[0-9] \"><a href=\"(.+)\" class=\"Tableau\">(.+)<br /><b>(.+)</b></a></td><td class=\"sujetCase10\">"); lastPostInfo.setCaseSensitivity(Qt::CaseSensitive); lastPostInfo.setMinimal(true); if(lastPostInfo.indexIn(threadListing, 0) != -1) { QString s = lastPostInfo.cap(1); s.replace(andAmp, "&"); item->setUrlLastPage(s); s = lastPostInfo.cap(2); s.replace(nbsp, " "); item->setTimestamp(s); item->setLastAuthor(lastPostInfo.cap(3)); } m_Datas->append(item); }