diff options
Diffstat (limited to 'quanta/project/projectlist.cpp')
-rw-r--r-- | quanta/project/projectlist.cpp | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/quanta/project/projectlist.cpp b/quanta/project/projectlist.cpp new file mode 100644 index 00000000..f5fdc24e --- /dev/null +++ b/quanta/project/projectlist.cpp @@ -0,0 +1,187 @@ +/*********************************************************************** + projectlist.cpp - List of ProjectURL's + ------------------- + begin : June 19 2004 + copyright : (C) 2004 by Jens Herden <[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. * + * * + ***************************************************************************/ + +// qt includes +#include <qdom.h> +#include <qstring.h> +#include <qfileinfo.h> + +// kde includes +#include <kprogress.h> + +#include "projectlist.h" +#include "projecturl.h" +#include "resource.h" +#include "quantacommon.h" + + +ProjectList::ProjectList(int size) : ProjectUrlList(size) +{ +} + + +void ProjectList::clear() +{ + m_baseURL = KURL(); + ProjectUrlList::clear(); +} + +bool ProjectList::readFromXML(QDomDocument &dom, const KURL &baseURL, + const KURL &/*templateURL*/, const QRegExp &excludeRx) +{ + clear(); // empty the list + m_baseURL = baseURL; // remember this + bool modified = false; + QDomElement el; + QDomNodeList nl = dom.firstChild().firstChild().childNodes(); + progressBar->setTotalSteps(nl.count() - 1); + progressBar->setValue(0); + progressBar->setTextEnabled(true); + QString path; + QString tmpString; + uint nlCount = nl.count(); + for ( uint i = 0; i < nlCount; i++ ) + { + KURL url = baseURL; + el = nl.item(i).toElement(); + tmpString = el.attribute("url"); + if (!tmpString.isEmpty()) + { + QuantaCommon::setUrl(url,tmpString); + //Compatibility conversion + if (tmpString != QuantaCommon::qUrl(url)) + { + el.setAttribute("url", QuantaCommon::qUrl(url)); + modified = true; + } + } + path = url.path(); + url = QExtFileInfo::toAbsolute(url, baseURL); + if ( el.nodeName() == "item" ) + { + if (excludeRx.exactMatch(path) || find(url.url(-1))) + { + el.parentNode().removeChild(el); + modified = true; + i--; + } else + { + bool docFolder = (el.attribute("documentFolder", "false") == "true"); + int uploadStatus = el.attribute("uploadstatus", "-1").toInt(); + if (uploadStatus == -1) + el.setAttribute("uploadstatus", 1); + //remove non-existent local files + if ( url.isLocalFile() ) + { + QFileInfo fi( url.path() ); + if ( !fi.exists() ) + { + el.parentNode().removeChild( el ); + modified = true; + i--; + } else + { + insert(url.url(-1), new ProjectURL(url, el.attribute("desc"), el.attribute("uploadstatus", "1").toInt(), + docFolder, el)); + } + } else + { + insert(url.url(-1), new ProjectURL(url, el.attribute("desc"), el.attribute("uploadstatus", "1").toInt(), + docFolder, el)); + } + } + } + progressBar->advance(1); + } + ProjectURL *proUrl = find(baseURL); + if (!proUrl) + { + el = dom.createElement("item"); + el.setAttribute("url", ""); + el.setAttribute("uploadstatus", "1"); + dom.firstChild().firstChild().appendChild(el); + insert(baseURL.url(-1), new ProjectURL(baseURL, "", ProjectURL::AlwaysUpload, + true, el)); + modified = true; + } + progressBar->setTotalSteps(1); + progressBar->setValue(0); + progressBar->setTextEnabled(false); + return modified; +} + + +bool ProjectList::removeFromListAndXML(const KURL &url) +{ + ProjectURL *p = find(url); + if (p) { + QDomElement el = p->domElement; + el.parentNode().removeChild(el); + remove(url.url(-1)); + return true; + } + return false; +} + + +bool ProjectList::contains(const KURL &url) const +{ + return ProjectUrlList::find(url.url(-1)); +} + + +ProjectURL * ProjectList::find(const KURL &url) const +{ + return ProjectUrlList::find(url.url(-1)); +} + + +void ProjectList::insert(ProjectURL *url) +{ + ProjectUrlList::insert(url->url(-1), url); +} + + +bool ProjectList::isFolder(const KURL &url) const +{ + ProjectURL *p = find(url); + return ( p && url.url(-1) != (*p).url() ); +} + + +void ProjectList::insert(const QString & key, const ProjectURL * item) +{ + ProjectUrlList::insert(key, item); +} + + +ProjectURL * ProjectList::find ( const QString & key ) const +{ + return ProjectUrlList::find(key); +} + + +bool ProjectList::remove ( const QString & key ) +{ + return ProjectUrlList::remove(key); +} + + +void ProjectList::replace(const QString & key, const ProjectURL * item) +{ + ProjectUrlList::replace(key, item); +} + |