23 #include <kdatastream.h>
24 #include <tdefileitem.h>
26 #include <tdefilemetainfo.h>
27 #include <tdeio/kservice.h>
28 #include <tdeparts/componentfactory.h>
32 #include "metainfojob.moc"
34 using namespace TDEIO;
36 struct TDEIO::MetaInfoJobPrivate
39 KFileItemListIterator* currentItem;
47 d =
new MetaInfoJobPrivate;
48 d->deleteItems = deleteItems;
51 d->currentItem =
new KFileItemListIterator(d->items);
53 d->items.setAutoDelete(deleteItems);
55 if (d->currentItem->isEmpty())
57 kdDebug(7007) <<
"nothing to do for the MetaInfoJob\n";
62 kdDebug(7007) <<
"starting MetaInfoJob\n";
66 TQTimer::singleShot(0,
this, TQT_SLOT(start()));
69 MetaInfoJob::~MetaInfoJob()
71 delete d->currentItem;
75 void MetaInfoJob::start()
82 if (d->currentItem->current() == item)
84 subjobs.first()->kill();
85 subjobs.removeFirst();
89 d->items.remove(d->items.find(item));
92 void MetaInfoJob::determineNextFile()
94 if (d->currentItem->atLast())
96 kdDebug(7007) <<
"finished MetaInfoJob\n";
102 d->succeeded =
false;
105 if (d->currentItem->current()->metaInfo(
false).isValid())
116 void MetaInfoJob::slotResult(
TDEIO::Job *job )
119 Q_ASSERT(subjobs.isEmpty());
124 void MetaInfoJob::getMetaInfo()
126 Q_ASSERT(!d->currentItem->isEmpty());
129 URL.setProtocol(
"metainfo");
130 URL.setPath(d->currentItem->current()->url().path());
135 connect(job, TQT_SIGNAL(data(
TDEIO::Job *,
const TQByteArray &)),
136 this, TQT_SLOT(slotMetaInfo(
TDEIO::Job *,
const TQByteArray &)));
138 job->
addMetaData(
"mimeType", d->currentItem->current()->mimetype());
142 void MetaInfoJob::slotMetaInfo(
TDEIO::Job*,
const TQByteArray &data)
145 TQDataStream s(data, IO_ReadOnly);
149 d->currentItem->current()->setMetaInfo(info);
158 for (TDETrader::OfferList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it)
159 result.append((*it)->desktopEntryName());
167 for (TDETrader::OfferList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it)
168 result += (*it)->property(
"MimeTypes").toStringList();
179 KFileItemList fileItems;
180 for (KURL::List::ConstIterator it = items.begin(); it != items.end(); ++it)
181 fileItems.append(
new KFileItem(KFileItem::Unknown, KFileItem::Unknown, *it,
true));