1
/*****************************************************************************
2
* Copyright (C) 2009 by Peter Penz <peter.penz@gmx.at> *
3
* Copyright (C) 2009 by Sebastian Trueg <trueg@kde.org> *
5
* This library is free software; you can redistribute it and/or *
6
* modify it under the terms of the GNU Library General Public *
7
* License version 2 as published by the Free Software Foundation. *
9
* This library is distributed in the hope that it will be useful, *
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
12
* Library General Public License for more details. *
14
* You should have received a copy of the GNU Library General Public License *
15
* along with this library; see the file COPYING.LIB. If not, write to *
16
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
17
* Boston, MA 02110-1301, USA. *
18
*****************************************************************************/
20
#include "kloadmetadatathread_p.h"
23
#include <kconfiggroup.h>
27
#include <kprotocolinfo.h>
29
#include <nepomuk/resource.h>
31
KLoadMetaDataThread::KLoadMetaDataThread() :
42
KLoadMetaDataThread::~KLoadMetaDataThread()
46
void KLoadMetaDataThread::load(const KUrl::List& urls)
53
void KLoadMetaDataThread::cancel()
55
// Setting m_canceled to true will cancel KLoadMetaDataThread::run()
56
// as soon as run() gets the chance to check m_cancel.
60
void KLoadMetaDataThread::cancelAndDelete()
63
Q_ASSERT(!isRunning());
66
connect(this, SIGNAL(finished()), this, SLOT(slotFinished()));
67
// Setting m_canceled to true will cancel KLoadMetaDataThread::run()
68
// as soon as run() gets the chance to check m_cancel.
70
// Afterwards the thread will delete itself
71
// asynchronously inside slotFinished().
74
void KLoadMetaDataThread::run()
76
KConfig config("kmetainformationrc", KConfig::NoGlobals);
77
KConfigGroup settings = config.group("Show");
80
foreach (const KUrl& url, m_urls) {
85
Nepomuk::Resource file(url);
86
if (!file.isValid()) {
90
m_files.insert(url, file);
92
if (!first && (m_rating != file.rating())) {
93
m_rating = 0; // reset rating
95
m_rating = file.rating();
98
if (!first && (m_comment != file.description())) {
99
m_comment.clear(); // reset comment
101
m_comment = file.description();
104
if (!first && (m_tags != file.tags())) {
105
m_tags.clear(); // reset tags
107
m_tags = file.tags();
110
if (first && (m_urls.count() == 1)) {
111
// TODO: show shared meta information instead
112
// of not showing anything on multiple selections
113
QHash<QUrl, Nepomuk::Variant> variants = file.properties();
114
QHash<QUrl, Nepomuk::Variant>::const_iterator it = variants.constBegin();
115
while (it != variants.constEnd()) {
116
Nepomuk::Types::Property prop(it.key());
117
if (settings.readEntry(prop.name(), true)) {
119
item.name = prop.name();
120
item.label = tunedLabel(prop.label());
121
item.value = formatValue(it.value());
122
m_items.append(item);
132
int KLoadMetaDataThread::rating() const
137
QString KLoadMetaDataThread::comment() const
142
QList<Nepomuk::Tag> KLoadMetaDataThread::tags() const
147
QList<KLoadMetaDataThread::Item> KLoadMetaDataThread::items() const
152
QMap<KUrl, Nepomuk::Resource> KLoadMetaDataThread::files() const
157
void KLoadMetaDataThread::slotFinished()
162
QString KLoadMetaDataThread::tunedLabel(const QString& label) const
165
const int labelLength = label.length();
166
if (labelLength > 0) {
167
tunedLabel.reserve(labelLength);
168
tunedLabel = label[0].toUpper();
169
for (int i = 1; i < labelLength; ++i) {
170
if (label[i].isUpper() && !label[i - 1].isSpace() && !label[i - 1].isUpper()) {
172
tunedLabel += label[i].toLower();
174
tunedLabel += label[i];
178
return tunedLabel + ':';
181
QString KLoadMetaDataThread::formatValue(const Nepomuk::Variant& value)
183
if (value.isDateTime()) {
184
return KGlobal::locale()->formatDateTime(value.toDateTime(), KLocale::FancyLongDate);
187
if (value.isResource() || value.isResourceList()) {
189
foreach(const Nepomuk::Resource& res, value.toResourceList()) {
190
if (KProtocolInfo::isKnownProtocol(res.resourceUri())) {
191
links << QString::fromLatin1("<a href=\"%1\">%2</a>")
192
.arg(KUrl(res.resourceUri()).url())
193
.arg(res.genericLabel());
195
links << res.genericLabel();
198
return links.join(QLatin1String(";\n"));
201
return value.toString();
204
#include "kloadmetadatathread_p.moc"