void HuggleFeedProviderWiki::ProcessEdit(QDomElement item) { WikiEdit *edit = new WikiEdit(); edit->Page = new WikiPage(item.attribute("title")); edit->Page->Site = this->GetSite(); QString type = item.attribute("type"); if (type == "new") edit->NewPage = true; if (item.attributes().contains("newlen") && item.attributes().contains("oldlen")) edit->SetSize(item.attribute("newlen").toLong() - item.attribute("oldlen").toLong()); if (item.attributes().contains("user")) { edit->User = new WikiUser(item.attribute("user")); if (item.attributes().contains("anon")) edit->User->ForceIP(); edit->User->Site = this->GetSite(); } if (item.attributes().contains("comment")) edit->Summary = item.attribute("comment"); if (item.attributes().contains("bot")) edit->Bot = true; if (item.attributes().contains("revid")) { edit->RevID = QString(item.attribute("revid")).toInt(); if (!edit->RevID) edit->RevID = WIKI_UNKNOWN_REVID; } if (item.attributes().contains("minor")) edit->Minor = true; edit->IncRef(); this->InsertEdit(edit); }
void HuggleFeedProviderIRC::ParseEdit(QString line) { // skip edits if provider is disabled if (this->Paused) { return; } if (!line.contains(QString(QChar(003)) + "07")) { HUGGLE_DEBUG("Invalid line (no07):" + line, 1); return; } line = line.mid(line.indexOf(QString(QChar(003)) + "07") + 3); if (!line.contains(QString(QChar(003)) + "14")) { HUGGLE_DEBUG("Invalid line (no14):" + line, 1); return; } WikiEdit *edit = new WikiEdit(); edit->Page = new WikiPage(line.mid(0, line.indexOf(QString(QChar(003)) + "14"))); edit->Page->Site = this->GetSite(); edit->IncRef(); if (!line.contains(QString(QChar(003)) + "4 ")) { HUGGLE_DEBUG("Invalid line (no:x4:" + line, 1); edit->DecRef(); return; } line = line.mid(line.indexOf(QString(QChar(003)) + "4 ") + 2); QString flags = line.mid(0, line.indexOf(QChar(003))); edit->Bot = flags.contains("B"); edit->NewPage = flags.contains("N"); edit->Minor = flags.contains("M"); // this below looks like a nasty hack to filter out just what we need // but I will later use all of these actions for something too if (flags.contains("thank") || flags.contains("modify") || flags.contains("rights") || flags.contains("review") || flags.contains("block") || flags.contains("protect") || flags.contains("reblock") || flags.contains("unhelpful") || flags.contains("helpful") || flags.contains("approve") || flags.contains("resolve") || flags.contains("upload") || flags.contains("feature") || flags.contains("noaction") || flags.contains("selfadd") || flags.contains("overwrite") || flags.contains("create") || flags.contains("delete") || flags.contains("restore") || flags.contains("move") || flags.contains("tag") || /* abuse filter */flags.contains("hit") || flags.contains("patrol") || flags.contains("revision")) { edit->DecRef(); return; } if (!edit->NewPage) { if (!line.contains("?diff=")) { HUGGLE_DEBUG("Invalid line (flags: " + flags + ") (no diff):" + line, 1); edit->DecRef(); return; } line = line.mid(line.indexOf("?diff=") + 6); if (!line.contains("&")) { HUGGLE_DEBUG("Invalid line (no &):" + line, 1); edit->DecRef(); return; } edit->Diff = line.mid(0, line.indexOf("&")).toInt(); edit->RevID = line.mid(0, line.indexOf("&")).toInt(); } if (!line.contains("oldid=")) { HUGGLE_DEBUG("Invalid line (no oldid?):" + line, 1); edit->DecRef(); return; } line = line.mid(line.indexOf("oldid=") + 6); if (!line.contains(QString(QChar(003)))) { HUGGLE_DEBUG("Invalid line (no termin):" + line, 1); edit->DecRef(); return; } edit->OldID = line.mid(0, line.indexOf(QString(QChar(003)))).toInt(); if (!line.contains(QString(QChar(003)) + "03")) { HUGGLE_DEBUG("Invalid line, no user: "******"03") + 3); if (!line.contains(QString(QChar(3)))) { HUGGLE_DEBUG("Invalid line (no termin):" + line, 1); edit->DecRef(); return; } QString name = line.mid(0, line.indexOf(QString(QChar(3)))); if (name.length() <= 0) { edit->DecRef(); return; } edit->User = new WikiUser(name); edit->User->Site = this->GetSite(); if (line.contains(QString(QChar(3)) + " (")) { line = line.mid(line.indexOf(QString(QChar(3)) + " (") + 3); if (line.contains(")")) { QString xx = line.mid(0, line.indexOf(")")); xx = xx.replace("\002", ""); long size = 0; if (xx.startsWith("+")) { xx = xx.mid(1); size = xx.toLong(); edit->SetSize(size); } else if (xx.startsWith("-")) { xx = xx.mid(1); size = xx.toLong() * -1; edit->SetSize(size); } else { HUGGLE_DEBUG("No size information for " + edit->Page->PageName, 1); } }else { HUGGLE_DEBUG("No size information for " + edit->Page->PageName, 1); } } else { HUGGLE_DEBUG("No size information for " + edit->Page->PageName, 1); } if (line.contains(QString(QChar(3)) + "10")) { line = line.mid(line.indexOf(QString(QChar(3)) + "10") + 3); if (line.contains(QString(QChar(3)))) { edit->Summary = line.mid(0, line.indexOf(QString(QChar(3)))); } } this->InsertEdit(edit); }