19#include "kservicefactory.h"
21#include "tdesycocatype.h"
22#include "tdesycocadict.h"
30#include <tdestandarddirs.h>
31#include <kstaticdeleter.h>
33KServiceFactory::KServiceFactory()
34 : KSycocaFactory( KST_KServiceFactory )
36 m_offerListOffset = 0;
38 m_relNameDictOffset = 0;
39 m_menuIdDictOffset = 0;
47 m_relNameDictOffset = i;
49 m_offerListOffset = i;
53 m_menuIdDictOffset = i;
55 int saveOffset = m_str->device()->at();
57 m_nameDict =
new KSycocaDict(m_str, m_nameDictOffset);
59 m_relNameDict =
new KSycocaDict(m_str, m_relNameDictOffset);
61 m_menuIdDict =
new KSycocaDict(m_str, m_menuIdDictOffset);
62 saveOffset = m_str->device()->at(saveOffset);
67 m_nameDict =
new KSycocaDict();
68 m_relNameDict =
new KSycocaDict();
69 m_menuIdDict =
new KSycocaDict();
74KServiceFactory::~KServiceFactory()
82KServiceFactory * KServiceFactory::self()
85 _self =
new KServiceFactory();
90KService * KServiceFactory::findServiceByName(
const TQString &_name)
92 if (!m_sycocaDict)
return 0;
98 int offset = m_sycocaDict->find_string( _name );
99 if (!offset)
return 0;
101 KService * newService = createEntry(offset);
104 if (newService && (newService->
name() != _name))
113KService * KServiceFactory::findServiceByDesktopName(
const TQString &_name)
115 if (!m_nameDict)
return 0;
121 int offset = m_nameDict->find_string( _name );
122 if (!offset)
return 0;
124 KService * newService = createEntry(offset);
136KService * KServiceFactory::findServiceByDesktopPath(
const TQString &_name)
138 if (!m_relNameDict)
return 0;
144 int offset = m_relNameDict->find_string( _name );
145 if (!offset)
return 0;
147 KService * newService = createEntry(offset);
159KService * KServiceFactory::findServiceByMenuId(
const TQString &_menuId)
161 if (!m_menuIdDict)
return 0;
167 int offset = m_menuIdDict->find_string( _menuId );
168 if (!offset)
return 0;
170 KService * newService = createEntry(offset);
173 if (newService && (newService->
menuId() != _menuId))
182KService* KServiceFactory::createEntry(
int offset)
186 TQDataStream *str = KSycoca::self()->findEntry(offset, type);
190 newEntry =
new KService(*str, offset);
194 kdError(7011) << TQString(TQString(
"KServiceFactory: unexpected object entry in KSycoca database (type = %1)").arg((
int)type)) << endl;
199 kdError(7011) <<
"KServiceFactory: corrupt object in KSycoca database!\n" << endl;
206KService::List KServiceFactory::allServices()
208 KService::List result;
209 KSycocaEntry::List list = allEntries();
210 for( KSycocaEntry::List::Iterator it = list.begin();
216 result.append( KService::Ptr( newService ) );
221KService::List KServiceFactory::allInitServices()
224 if (!m_str)
return list;
228 m_str->device()->at(m_initListOffset);
230 (*m_str) >> entryCount;
232 TQ_INT32 *offsetList =
new TQ_INT32[entryCount];
233 for(
int i = 0; i < entryCount; i++)
235 (*m_str) >> offsetList[i];
238 for(
int i = 0; i < entryCount; i++)
240 KService *newEntry = createEntry(offsetList[i]);
243 list.append( KService::Ptr( newEntry ) );
246 delete [] offsetList;
250KService::List KServiceFactory::offers(
int serviceTypeOffset )
254 TQDataStream *str = m_str;
256 str->device()->at( m_offerListOffset );
258 TQ_INT32 aServiceTypeOffset;
259 TQ_INT32 aServiceOffset;
264 (*str) >> aServiceTypeOffset;
265 if ( aServiceTypeOffset )
267 (*str) >> aServiceOffset;
268 if ( aServiceTypeOffset == serviceTypeOffset )
271 int savedPos = str->device()->at();
273 KService * serv = createEntry( aServiceOffset );
275 list.append( KService::Ptr( serv ) );
277 str->device()->at( savedPos );
278 }
else if ( aServiceTypeOffset > (TQ_INT32)serviceTypeOffset )
287KServiceFactory *KServiceFactory::_self = 0;
289void KServiceFactory::virtual_hook(
int id,
void* data )
290{ KSycocaFactory::virtual_hook(
id, data ); }
Represent a service, i.e.
TQString desktopEntryPath() const
Returns the path to the location where the service desktop entry is stored.
bool isValid() const
Checks whether the service is valid.
TQString menuId() const
Returns the menu ID of the service desktop entry.
virtual TQString name() const
Returns the name of the service.
TQString desktopEntryName() const
Returns the filename of the service desktop entry without any extension.