29#include <QtCore/QByteArray>
30#include <QtCore/QCoreApplication>
31#include <QtCore/QDataStream>
32#include <QtCore/QHash>
33#include <QtCore/QString>
34#include <QtCore/QTimer>
36#define DISABLE_NEPOMUK_LEGACY
37#include "config-nepomuk.h"
39#include <nepomuk/query/filequery.h>
40#include <nepomuk/query/comparisonterm.h>
41#include <nepomuk/query/andterm.h>
42#include <nepomuk/query/resourceterm.h>
43#include <nepomuk/query/resourcetypeterm.h>
44#include <nepomuk/query/optionalterm.h>
45#include <nepomuk/utils/utils.h>
46#include <nepomuk/types/property.h>
47#include <nepomuk/core/tag.h>
48#include <nepomuk/core/variant.h>
49#include <nepomuk/core/resourcemanager.h>
53class KFileMetaDataReaderApplication :
public QCoreApplication
58 KFileMetaDataReaderApplication(
int& argc,
char** argv);
61 void readAndSendMetaData();
71KFileMetaDataReaderApplication::KFileMetaDataReaderApplication(
int& argc,
char** argv) :
72 QCoreApplication(argc, argv)
74 QTimer::singleShot(0,
this, SLOT(readAndSendMetaData()));
77void KFileMetaDataReaderApplication::readAndSendMetaData()
82 for (
int i = 0; i < args->
count(); ++i) {
83 urls.append(
KUrl(args->
arg(i)));
87 if (args->
isSet(
"file")) {
88 metaData = readFileMetaData(urls);
90 metaData = readFileAndContextMetaData(urls);
93 sendMetaData(metaData);
100 QByteArray byteArray;
101 QDataStream out(&byteArray, QIODevice::WriteOnly);
103 QHashIterator<KUrl, Nepomuk::Variant> it(data);
104 while (it.hasNext()) {
112 const Nepomuk::Variant& variant = it.value();
113 if (variant.isList()) {
114 out << 0 << variant.toStringList();
115 }
else if (variant.isResource()) {
116 out << 1 << variant.toString();
118 out << 2 << variant.variant();
122 cout << byteArray.toBase64().constData();
132 if (urls.count() == 1) {
133 const QString path = urls.first().toLocalFile();
137 const QString uriString = metaInfoItem.
name();
138 const Nepomuk::Variant value(metaInfoItem.
value());
139 data.insert(uriString,
140 Nepomuk::Utils::formatPropertyValue(Nepomuk::Types::Property(), value));
151 bool isNepomukIndexerActive =
false;
152 if (Nepomuk::ResourceManager::instance()->initialized()) {
154 isNepomukIndexerActive =
config.group(
"Service-nepomukfileindexer").readEntry(
"autostart",
false);
157 return readFileMetaData(urls);
160 unsigned int rating = 0;
164 if (urls.count() == 1) {
167 bool useReadFromFileFallback =
true;
169 Nepomuk::Resource file(urls.first());
170 if (file.isValid() && !file.resourceUri().isEmpty()) {
173 while (it != variants.constEnd()) {
174 Nepomuk::Types::Property prop(it.key());
175 metaData.insert(prop.uri(), Nepomuk::Utils::formatPropertyValue(prop, it.value(),
177 Nepomuk::Utils::WithKioLinks));
180 useReadFromFileFallback = !isNepomukIndexerActive || variants.isEmpty();
182 rating = file.rating();
183 comment = file.description();
187 if (useReadFromFileFallback) {
190 metaData = readFileMetaData(
QList<KUrl>() << urls.first());
195 foreach (
const KUrl& url, urls) {
196 Nepomuk::Resource file(url);
197 if (!file.isValid()) {
201 if (!first && rating != file.rating()) {
204 rating = file.rating();
207 if (!first && comment != file.description()) {
210 comment = file.description();
213 if (!first && tags != file.tags()) {
223 metaData.insert(
KUrl(
"kfileitem#rating"), rating);
224 metaData.insert(
KUrl(
"kfileitem#comment"), comment);
227 foreach (
const Nepomuk::Tag& tag, tags) {
228 tagVariants.append(Nepomuk::Variant(tag));
230 metaData.insert(
KUrl(
"kfileitem#tags"), tagVariants);
235int main(
int argc,
char *argv[])
237 KAboutData aboutData(
"kfilemetadatareader",
"kio4",
ki18n(
"KFileMetaDataReader"),
239 ki18n(
"KFileMetaDataReader can be used to read metadata from a file"),
241 ki18n(
"(C) 2011, Peter Penz"));
242 aboutData.
addAuthor(
ki18n(
"Peter Penz"),
ki18n(
"Current maintainer"),
"peter.penz19@gmail.com");
248 options.
add(
"file",
ki18n(
"Only the meta data that is part of the file is read"));
249 options.
add(
"+[arg]",
ki18n(
"List of URLs where the meta-data should be read from"));
253 KFileMetaDataReaderApplication app(argc, argv);
257#include "kfilemetadatareaderprocess.moc"
KAboutData & addAuthor(const KLocalizedString &name, const KLocalizedString &task, const QByteArray &emailAddress, const QByteArray &webAddress, const QByteArray &ocsUsername)
bool isSet(const QByteArray &option) const
static void init(const KAboutData *about)
static KCmdLineArgs * parsedArgs(const QByteArray &id=QByteArray())
static void addCmdLineOptions(const KCmdLineOptions &options, const KLocalizedString &name=KLocalizedString(), const QByteArray &id=QByteArray(), const QByteArray &afterId=QByteArray())
KCmdLineOptions & add(const KCmdLineOptions &options)
KLocalizedString ki18n(const char *msg)
KSharedConfigPtr config()
KAction * quit(const QObject *recvr, const char *slot, QObject *parent)