/*************************************************************************** * Copyright (C) 2008 by Sebastian Trueg * * * * 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 "nepomukmassupdatejob_p.h" #include #include #include Nepomuk::MassUpdateJob::MassUpdateJob(QObject* parent) : KJob(parent), m_index(-1) { setCapabilities(Killable|Suspendable); connect(&m_processTimer, SIGNAL(timeout()), this, SLOT(slotNext())); } Nepomuk::MassUpdateJob::~MassUpdateJob() { } void Nepomuk::MassUpdateJob::setFiles(const KUrl::List& urls) { m_resources.clear(); foreach(const KUrl &url, urls){ m_resources.append(Resource(url)); } setTotalAmount(KJob::Files, m_resources.count()); } void Nepomuk::MassUpdateJob::setResources(const QList& rl) { m_resources = rl; setTotalAmount(KJob::Files, m_resources.count()); } void Nepomuk::MassUpdateJob::setProperties(const QList >& props) { m_properties = props; } void Nepomuk::MassUpdateJob::start() { if (m_index < 0){ emit description(this, i18nc("@info:progress", "Changing annotations")); m_index = 0; m_processTimer.start(); } } bool Nepomuk::MassUpdateJob::doKill() { if (m_index > 0){ m_processTimer.stop(); m_index = -1; return true; } else { return false; } } bool Nepomuk::MassUpdateJob::doSuspend() { m_processTimer.stop(); return true; } bool Nepomuk::MassUpdateJob::doResume() { if (m_index > 0){ m_processTimer.start(); return true; } else { return false; } } void Nepomuk::MassUpdateJob::slotNext() { if (!isSuspended()) { if (m_index < m_resources.count()){ Nepomuk::Resource& res = m_resources[m_index]; for (int i = 0; i < m_properties.count(); ++i){ res.setProperty(m_properties[i].first, m_properties[i].second); } ++m_index; setProcessedAmount(KJob::Files, m_index); } else if (m_index >= m_resources.count()) { m_index = -1; m_processTimer.stop(); emitResult(); } } } Nepomuk::MassUpdateJob* Nepomuk::MassUpdateJob::tagResources(const QList& rl, const QList& tags) { Nepomuk::MassUpdateJob* job = new Nepomuk::MassUpdateJob(); job->setResources(rl); job->setProperties(QList >() << qMakePair(QUrl(Nepomuk::Resource::tagUri()), Nepomuk::Variant(convertResourceList(tags)))); return job; } Nepomuk::MassUpdateJob* Nepomuk::MassUpdateJob::rateResources(const QList& rl, unsigned int rating) { Nepomuk::MassUpdateJob* job = new Nepomuk::MassUpdateJob(); job->setResources(rl); job->setProperties(QList >() << qMakePair(QUrl(Nepomuk::Resource::ratingUri()), Nepomuk::Variant(rating))); return job; } Nepomuk::MassUpdateJob* Nepomuk::MassUpdateJob::commentResources(const QList& rl, const QString& comment) { Nepomuk::MassUpdateJob* job = new Nepomuk::MassUpdateJob(); job->setResources(rl); job->setProperties(QList >() << qMakePair(QUrl(Nepomuk::Resource::descriptionUri()), Nepomuk::Variant(comment))); return job; } #include "nepomukmassupdatejob_p.moc"