diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | e9ae80694875f869892f13f4fcaf1170a00dea41 (patch) | |
tree | aa2f8d8a217e2d376224c8d46b7397b68d35de2d /klinkstatus/src/engine/linkstatus.cpp | |
download | tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.tar.gz tdewebdev-e9ae80694875f869892f13f4fcaf1170a00dea41.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdewebdev@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'klinkstatus/src/engine/linkstatus.cpp')
-rw-r--r-- | klinkstatus/src/engine/linkstatus.cpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/klinkstatus/src/engine/linkstatus.cpp b/klinkstatus/src/engine/linkstatus.cpp new file mode 100644 index 00000000..c8b359ed --- /dev/null +++ b/klinkstatus/src/engine/linkstatus.cpp @@ -0,0 +1,214 @@ +/*************************************************************************** + * Copyright (C) 2004 by Paulo Moura Guedes * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "linkstatus.h" +#include "../parser/node.h" +#include "../ui/treeview.h" + +#include <klocale.h> +#include <kcharsets.h> + +#include <qdom.h> + + +LinkStatus::~LinkStatus() +{ + //kdDebug(23100) << "|"; + + for(uint i = 0; i != children_nodes_.size(); ++i) + { + if(children_nodes_[i]) + { + delete children_nodes_[i]; + children_nodes_[i] = 0; + } + } + + children_nodes_.clear(); + + if(isRedirection()) + { + if(redirection_) + { + delete redirection_; + redirection_ = 0; + } + } +} + +void LinkStatus::reset() +{ + depth_ = -1; + external_domain_depth_ = -1; + is_root_ = false; + error_occurred_ = false; + is_redirection_ = false; + checked_ = false; + only_check_header_ = true; + malformed_ = false; + Q_ASSERT(!node_); + has_base_URI_ = false; + label_ = ""; + absolute_url_ = ""; + doc_html_ = ""; + http_header_ = HttpResponseHeader(); + error_ = ""; + + for(uint i = 0; i != children_nodes_.size(); ++i) + { + if(children_nodes_[i]) + { + delete children_nodes_[i]; + children_nodes_[i] = 0; + } + } + + children_nodes_.clear(); + + if(isRedirection()) + { + if(redirection_) + { + delete redirection_; + redirection_ = 0; + } + } + Q_ASSERT(!parent_); + base_URI_ = ""; +} + +QString const LinkStatus::toString() const +{ + QString aux; + + if(!is_root_) + { + Q_ASSERT(parent_); + aux += i18n( "Parent: %1" ).arg( parent()->absoluteUrl().prettyURL() ) + "\n"; + } + Q_ASSERT(!original_url_.isNull()); + + aux += i18n( "URL: %1" ).arg( absoluteUrl().prettyURL() ) + "\n"; + aux += i18n( "Original URL: %1" ).arg( originalUrl() ) + "\n"; + if(node()) + aux += i18n( "Node: %1" ).arg( node()->content() ) + "\n"; + + return aux; +} + + +LinkStatus* LinkStatus::lastRedirection(LinkStatus* ls) +{ + if(ls->isRedirection()) + if(ls->redirection()) + return lastRedirection(ls->redirection()); + else + return ls; + else + return ls; +} + +void LinkStatus::loadNode() +{ + Q_ASSERT(node_); + + setOriginalUrl(node_->url()); + setLabel(node_->linkLabel()); + + if(malformed()) + { + setErrorOccurred(true); + setError(i18n( "Malformed" )); + setStatus(LinkStatus::MALFORMED); + kdDebug(23100) << "Malformed:" << endl; + kdDebug(23100) << "Node: " << node()->content() << endl; + //kdDebug(23100) << toString() << endl; // probable segfault + } +} + +bool LinkStatus::malformed() const // don't inline please (#include "node.h") +{ + return (malformed_ || node_->malformed()); +} + +void LinkStatus::setChildrenNodes(vector<Node*> const& nodes) // don't inline please (#include "node.h") +{ + children_nodes_.reserve(nodes.size()); + children_nodes_ = nodes; +} + +void LinkStatus::setMalformed(bool flag) +{ + malformed_ = flag; + if(flag) + { + setErrorOccurred(true); + setError(i18n( "Malformed" )); + setStatus(LinkStatus::MALFORMED); + kdDebug(23100) << "Malformed!" << endl; + kdDebug(23100) << node()->content() << endl; + //kdDebug(23100) << toString() << endl; // probable segfault + } + else if(error() == i18n( "Malformed" )) + { + setErrorOccurred(false); + setError(""); + setStatus(LinkStatus::UNDETERMINED); + } +} + +void LinkStatus::save(QDomElement& element) const +{ + QDomElement child_element = element.ownerDocument().createElement("link"); + + // <url> + QDomElement tmp_1 = element.ownerDocument().createElement("url"); + tmp_1.appendChild(element.ownerDocument().createTextNode(absoluteUrl().prettyURL())); + child_element.appendChild(tmp_1); + + // <status> + tmp_1 = element.ownerDocument().createElement("status"); + tmp_1.setAttribute("broken", + ResultView::displayableWithStatus(this, ResultView::bad) ? + "true" : "false"); + tmp_1.appendChild(element.ownerDocument().createTextNode(statusText())); + child_element.appendChild(tmp_1); + + // <label> + tmp_1 = element.ownerDocument().createElement("label"); + tmp_1.appendChild(element.ownerDocument().createTextNode(KCharsets::resolveEntities(label()))); + child_element.appendChild(tmp_1); + + // <referers> + tmp_1 = element.ownerDocument().createElement("referrers"); + + for(QValueVector<KURL>::const_iterator it = referrers_.begin(); it != referrers_.end(); ++it) + { + QDomElement tmp_2 = element.ownerDocument().createElement("url"); + tmp_2.appendChild(element.ownerDocument().createTextNode(it->prettyURL())); + + tmp_1.appendChild(tmp_2); + } + Q_ASSERT(!referrers_.isEmpty()); + child_element.appendChild(tmp_1); + + element.appendChild(child_element); +} + |