コード例 #1
0
void SearchController::parseThreadListing(const QString &caption, const QString &urlFirstPage, bool read, const QString &threadListing) {
	ThreadListItem *item = new ThreadListItem();
	QRegExp andAmp("&");
	QRegExp nbsp(" ");


	{
		bool inf = false;
		bool slash = false;
		int idx = 0;
		for(int i = 0 ; i < caption.length() ; ++i) {
			if(caption[i] == '<') {
				inf = true;
				continue;
			}
			if(inf && caption[i] == '/') {
				slash = true;
				continue;
			} else {
				inf = false;
			}

			if(slash && caption[i] == 'a') {
				idx = i-2;
				break;
			}
		}

		if(idx != 0)
			item->setTitle(caption.mid(0,idx));
		else
			item->setTitle(caption);
	}

	item->setRead(read);
	item->setUrlFirstPage(urlFirstPage);

	QRegExp lastPostReadRegexp("</td><td class=\"sujetCase5\"><a href=\"(.*#t[0-9bas]+)\"><img src=");
	lastPostReadRegexp.setCaseSensitivity(Qt::CaseSensitive);
	lastPostReadRegexp.setMinimal(true);

	if(lastPostReadRegexp.indexIn(threadListing, 0) != -1) {
		QString s = lastPostReadRegexp.cap(1);
		s.replace(andAmp, "&");
		item->setUrlLastPostRead(s);
	}

	QRegExp pageNumberRegExp("<td class=\"sujetCase4\"><a href=\"(.*)\" class=\"cCatTopic\">([0-9]+)</a></td><td class=\"sujetCase5\">");
	pageNumberRegExp.setCaseSensitivity(Qt::CaseSensitive);
	pageNumberRegExp.setMinimal(true);

	if(pageNumberRegExp.indexIn(threadListing, 0) != -1) {
		item->setPages(pageNumberRegExp.cap(2));

		if(item->getUrlLastPostRead() == "") {
			QString s = pageNumberRegExp.cap(1);
			s.replace(andAmp, "&");
			item->setUrlLastPostRead(s+"#bas");
		}
	} else {
		item->setPages("1");
	}

	QRegExp lastPageRegExp("<td class=\"sujetCase9 cBackCouleurTab[0-9] \"><a href=\"(.*)\" class=\"Tableau\">(.*)<br /><b>(.*)</b>");
	lastPageRegExp.setCaseSensitivity(Qt::CaseSensitive);
	lastPageRegExp.setMinimal(true);

	if(lastPageRegExp.indexIn(threadListing, 0) != -1) {
		QString s = lastPageRegExp.cap(2);
		s.replace(nbsp, " ");
		item->setTimestamp(s);

		s = lastPageRegExp.cap(1);
		s.replace(andAmp, "&");
		item->setUrlLastPage(s);

		item->setLastAuthor(lastPageRegExp.cap(3));
	}

	QRegExp flagTypeRegexp("<img src=\"http://forum-images.hardware.fr/themes_static/images_forum/1/favoris.gif\"");
	if(flagTypeRegexp.indexIn(threadListing, 0) != -1)
		item->setFlagType(Flag::FAVORITE);

	flagTypeRegexp = QRegExp("<img src=\"http://forum-images.hardware.fr/themes_static/images_forum/1/flag([0-1]).gif\"");
	if(flagTypeRegexp.indexIn(threadListing, 0) != -1) {
		switch(flagTypeRegexp.cap(1).toInt()) {
			case 0:
				item->setFlagType(Flag::READ);
				break;

			case 1:
				item->setFlagType(Flag::PARTICIPATE);
				break;
		}
	}


	if(!item->getLastAuthor().isEmpty())
		m_Datas->append(item);
	else
		item->deleteLater();

}
コード例 #2
0
void HeadlessApplication::parseThreadListing(const QString &category, const QString &caption, const QString &urlFirstPage, const QString &threadListing, const QString &today, int groupKey) {
    //                         + ".*<td class=\"sujetCase4\"><a href=\"(.+)\" class=\"cCatTopic\">"     // link to first post
    //                         + "([0-9]+)</a></td>"                                                    // overall number of pages
    //                         + ".*<td class=\"sujetCase5\"><a href=\"(.+)\"><img src"                 // index to last read post
    //                         + ".*p.([0-9]+)"                                     // last page read number
    //                         + ".*<td class=\"sujetCase9.*class=\"Tableau\">(.+)"                     // time stamp
    //                         + "<br /><b>(.+)</b></a></td><td class=\"sujetCase10\"><input type");    // last contributor

    QRegExp andAmp("&amp;");

    if(caption.isEmpty())
        return;

    ThreadListItem *item = new ThreadListItem();
    item->setCategory(category);
    item->setTitle(caption);
    item->setUrlFirstPage(urlFirstPage);

    QRegExp firstPostAndPage(QString("<td class=\"sujetCase4\"><a href=\".+\" class=\"cCatTopic\">")        // link to first post
                                 + "([0-9]+)</a></td>");                                                    // overall number of pages

    firstPostAndPage.setCaseSensitivity(Qt::CaseSensitive);
    firstPostAndPage.setMinimal(true);

    if(firstPostAndPage.indexIn(threadListing, 0) != -1) {
        item->setPages(firstPostAndPage.cap(1));
    }



    QRegExp lastReadAndPage(QString("<td class=\"sujetCase5\"><a href=\"(.+)\"><img src.*p.([0-9]+).*\" alt=\"flag\"")); // index to last read post + last page read number
    lastReadAndPage.setCaseSensitivity(Qt::CaseSensitive);
    lastReadAndPage.setMinimal(true);

    if(lastReadAndPage.indexIn(threadListing, 0) != -1) {
        QString s = lastReadAndPage.cap(1); s.replace(andAmp, "&");
        item->setUrlLastPostRead(s);

        item->setPages(lastReadAndPage.cap(2)  + "/" + item->getPages());
    }


    QRegExp lastContribution("<td class=\"sujetCase9 cBackCouleurTab[0-9] \"><a href=\"(.+)\" class=\"Tableau\">(.+)<br /><b>(.+)</b></a></td><td class=\"sujetCase10\"><input type"); // timestamp + last contributor
    lastContribution.setCaseSensitivity(Qt::CaseSensitive);
    lastContribution.setMinimal(true);

    if(lastContribution.indexIn(threadListing, 0) != -1) {
        QString s = lastContribution.cap(2);
        item->setDetailedTimestamp(s);

        item->setLastAuthor(lastContribution.cap(3));

        s = lastContribution.cap(1);
        s.replace(andAmp, "&");
        item->setUrlLastPage(s);

    }

    QRegExp postIDRegExp("post=([0-9]+)");
    QRegExp catIDRefExp("cat=([0-9]+)");
    if(postIDRegExp.indexIn(item->getUrlLastPage()) != -1 && catIDRefExp.indexIn(item->getUrlLastPage()) != -1) {
        item->setColor(getTagValue(postIDRegExp.cap(1) + "@" + catIDRefExp.cap(1)));
    } else {
        item->setColor(0);
    }

    //qDebug() << item->getTitle() << postIDRegExp.cap(1) + "@" + catIDRefExp.cap(1) << item->getColor();

    if(item->getColor() == 0) {
        item->deleteLater();
        return;
    }


    QSettings settings("Amonchakai", "HFR10");

    /*
    qDebug() << item->getColor()
             << settings.value("NotifGreen",false).toBool()
             << settings.value("NotifBlue",false).toBool()
             << settings.value("NotifOrange",false).toBool()
             << settings.value("NotifPink",false).toBool()
             << settings.value("NotifPurple",false).toBool();
     */
    switch(item->getColor()) {
        case 1:
            if(!settings.value("NotifGreen",false).toBool()){
                item->deleteLater();
                return;
            }
            break;

        case 2:
            if(!settings.value("NotifBlue",false).toBool()){
                item->deleteLater();
                return;
            }
            break;


        case 3:
            if(!settings.value("NotifOrange",false).toBool()){
                item->deleteLater();
                return;
            }
            break;

        case 4:
            if(!settings.value("NotifPink",false).toBool()){
                item->deleteLater();
                return;
            }
            break;

        case 5:
            if(!settings.value("NotifPurple",false).toBool()){
                item->deleteLater();
                return;
            }
            break;
    }



    QString SubjectNumber = postIDRegExp.cap(1) + QString::number(catIDRefExp.cap(1).toInt()*10000);
    qint64 timestamp = QDateTime::fromString(item->getDetailedTimestamp().mid(0,10) + " " + item->getDetailedTimestamp().mid(23), "dd-MM-yyyy hh:mm").toMSecsSinceEpoch();

    // -----------------------------------------------------------
    // add item into the Hub

    QVariantList hubItems = m_Hub->items();

    bool existing = false;
    QVariantMap itemMap;
    for(int i = 0 ; i < hubItems.length() ; ++i) {
        itemMap = hubItems.at(i).toMap();

        if(itemMap["syncId"].toString() == SubjectNumber) {
            existing = true;
            break;
        }
    }




    if(existing) {

        if(itemMap["timestamp"].toULongLong() == timestamp) {
            item->deleteLater();
            return;
        }

        itemMap["description"] = item->getLastAuthor();
        itemMap["timestamp"] = timestamp;
        itemMap["readCount"] = item->isRead();

        if(!item->getUrlLastPostRead().isEmpty())
            itemMap["url"] = item->getUrlLastPostRead();
        else {
            if(!item->getUrlLastPage().isEmpty())
                itemMap["url"] = item->getUrlFirstPage();
            else {
                itemMap["url"] = item->getUrlFirstPage();
            }
        }

        qint64 itemId;
        if (itemMap["sourceId"].toString().length() > 0) {
            itemId = itemMap["sourceId"].toLongLong();
        } else if (itemMap["messageid"].toString().length() > 0) {
            itemId = itemMap["messageid"].toLongLong();
        }

        qDebug() << "New favorite. update post --> notif.";
        m_Hub->updateHubItem(m_Hub->categoryId(), itemId, itemMap, true);

    } else {

        QVariantMap entry;
        if(!item->getUrlLastPostRead().isEmpty())
            entry["url"] = item->getUrlLastPostRead();
        else {
            if(!item->getUrlFirstPage().isEmpty())
                entry["url"] = item->getUrlFirstPage();
            else {
                item->deleteLater();
                return;
            }
        }

        qDebug() << "New favorite. add new entry --> notif.";
        m_Hub->addHubItem(m_Hub->categoryId(), entry, item->getTitle(), item->getLastAuthor(), timestamp, SubjectNumber, SubjectNumber, "",  true);

    }

    item->deleteLater();


}
コード例 #3
0
void ListFavoriteController::parseThreadListing(const QString &category, const QString &caption, const QString &urlFirstPage, const QString &threadListing, const QString &today, int groupKey) {
	//						   + ".*<td class=\"sujetCase4\"><a href=\"(.+)\" class=\"cCatTopic\">"		// link to first post
	//						   + "([0-9]+)</a></td>"													// overall number of pages
	//						   + ".*<td class=\"sujetCase5\"><a href=\"(.+)\"><img src"					// index to last read post
	//						   + ".*p.([0-9]+)"										// last page read number
	//						   + ".*<td class=\"sujetCase9.*class=\"Tableau\">(.+)" 					// time stamp
	//						   + "<br /><b>(.+)</b></a></td><td class=\"sujetCase10\"><input type");	// last contributor

	QRegExp andAmp("&amp;");

	if(caption.isEmpty())
	    return;

	ThreadListItem *item = new ThreadListItem();
	item->setCategory(category);
	item->setTitle(caption);
	item->setUrlFirstPage(urlFirstPage);

	QRegExp firstPostAndPage(QString("<td class=\"sujetCase4\"><a href=\".+\" class=\"cCatTopic\">")		// link to first post
								 + "([0-9]+)</a></td>");													// overall number of pages

	firstPostAndPage.setCaseSensitivity(Qt::CaseSensitive);
	firstPostAndPage.setMinimal(true);

	if(firstPostAndPage.indexIn(threadListing, 0) != -1) {
		item->setPages(firstPostAndPage.cap(1));
	}



	QRegExp lastReadAndPage(QString("<td class=\"sujetCase5\"><a href=\"(.+)\"><img src.*p.([0-9]+).*\" alt=\"flag\"")); // index to last read post + last page read number
	lastReadAndPage.setCaseSensitivity(Qt::CaseSensitive);
	lastReadAndPage.setMinimal(true);

	if(lastReadAndPage.indexIn(threadListing, 0) != -1) {
		QString s = lastReadAndPage.cap(1); s.replace(andAmp, "&");
		item->setUrlLastPostRead(s);

		item->setPages(lastReadAndPage.cap(2)  + "/" + item->getPages());
	}


	QRegExp lastContribution("<td class=\"sujetCase9 cBackCouleurTab[0-9] \"><a href=\"(.+)\" class=\"Tableau\">(.+)<br /><b>(.+)</b></a></td><td class=\"sujetCase10\"><input type"); // timestamp + last contributor
	lastContribution.setCaseSensitivity(Qt::CaseSensitive);
	lastContribution.setMinimal(true);

	if(lastContribution.indexIn(threadListing, 0) != -1) {
		QString s = lastContribution.cap(2);
		if(s.mid(0,10).compare(today) == 0)
			item->setTimestamp(s.mid(23,5));
		else
			item->setTimestamp(s.mid(0,10));
		item->setDetailedTimestamp(s);


		item->setLastAuthor(lastContribution.cap(3));

		s = lastContribution.cap(1);
		s.replace(andAmp, "&");
		item->setUrlLastPage(s);

	}

	QRegExp postIDRegExp("post=([0-9]+)");
	QRegExp catIDRefExp("cat=([0-9]+)");
	if(postIDRegExp.indexIn(item->getUrlLastPage()) != -1 && catIDRefExp.indexIn(item->getUrlLastPage()) != -1) {
	    item->setColor(Settings::getTagValue(postIDRegExp.cap(1) + "@" + catIDRefExp.cap(1)));
	} else {
	    item->setColor(0);
	}

	item->setGroupKey(groupKey);

	m_Datas->append(item);

}