• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kded
 

kded

  • kded
kbuildservicefactory.cpp
1/* This file is part of the KDE libraries
2 * Copyright (C) 1999 David Faure <faure@kde.org>
3 * 1999 Waldo Bastian <bastian@kde.org>
4 *
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;
8 *
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.
13 *
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 **/
19
20#include "kbuildservicefactory.h"
21#include "tdesycoca.h"
22#include "tdesycocadict.h"
23#include "kresourcelist.h"
24#include "kmimetype.h"
25
26#include <tdeglobal.h>
27#include <tdestandarddirs.h>
28#include <kmessageboxwrapper.h>
29#include <tdelocale.h>
30#include <kdebug.h>
31#include <assert.h>
32
33KBuildServiceFactory::KBuildServiceFactory( KSycocaFactory *serviceTypeFactory,
34 KBuildServiceGroupFactory *serviceGroupFactory ) :
35 KServiceFactory(),
36 m_serviceDict(977),
37 m_dupeDict(977),
38 m_serviceTypeFactory( serviceTypeFactory ),
39 m_serviceGroupFactory( serviceGroupFactory )
40{
41 m_resourceList = new KSycocaResourceList();
42// m_resourceList->add( "apps", "*.desktop" );
43// m_resourceList->add( "apps", "*.kdelnk" );
44 m_resourceList->add( "services", "*.desktop" );
45 m_resourceList->add( "services", "*.kdelnk" );
46}
47
48// return all service types for this factory
49// i.e. first arguments to m_resourceList->add() above
50TQStringList KBuildServiceFactory::resourceTypes()
51{
52 return TQStringList() << "apps" << "services";
53}
54
55KBuildServiceFactory::~KBuildServiceFactory()
56{
57 delete m_resourceList;
58}
59
60KService * KBuildServiceFactory::findServiceByName(const TQString &_name)
61{
62 return m_serviceDict[_name];
63}
64
65
66KSycocaEntry *
67KBuildServiceFactory::createEntry( const TQString& file, const char *resource )
68{
69 TQString name = file;
70 int pos = name.findRev('/');
71 if (pos != -1)
72 {
73 name = name.mid(pos+1);
74 }
75
76 if (name.isEmpty())
77 return 0;
78
79 // Is it a .desktop file?
80 if (!name.endsWith(".desktop") && !name.endsWith(".kdelnk"))
81 return 0;
82
83 KDesktopFile desktopFile(file, true, resource);
84
85 KService * serv = new KService( &desktopFile );
86
87 if ( serv->isValid() && !serv->isDeleted() )
88 {
89 return serv;
90 } else {
91 if (!serv->isDeleted())
92 kdWarning(7012) << "Invalid Service : " << file << endl;
93 delete serv;
94 return 0L;
95 }
96}
97
98
99void
100KBuildServiceFactory::saveHeader(TQDataStream &str)
101{
102 KSycocaFactory::saveHeader(str);
103
104 str << (TQ_INT32) m_nameDictOffset;
105 str << (TQ_INT32) m_relNameDictOffset;
106 str << (TQ_INT32) m_offerListOffset;
107 str << (TQ_INT32) m_initListOffset;
108 str << (TQ_INT32) m_menuIdDictOffset;
109}
110
111void
112KBuildServiceFactory::save(TQDataStream &str)
113{
114 KSycocaFactory::save(str);
115
116 m_nameDictOffset = str.device()->at();
117 m_nameDict->save(str);
118
119 m_relNameDictOffset = str.device()->at();
120 m_relNameDict->save(str);
121
122 saveOfferList(str);
123 saveInitList(str);
124
125 m_menuIdDictOffset = str.device()->at();
126 m_menuIdDict->save(str);
127
128 int endOfFactoryData = str.device()->at();
129
130 // Update header (pass #3)
131 saveHeader(str);
132
133
134 // Seek to end.
135 str.device()->at(endOfFactoryData);
136}
137
138void
139KBuildServiceFactory::saveOfferList(TQDataStream &str)
140{
141 m_offerListOffset = str.device()->at();
142
143 bool isNumber;
144 for(TQDictIterator<KSycocaEntry::Ptr> itserv ( *m_entryDict );
145 itserv.current();
146 ++itserv)
147 {
148 KService *service = (KService *) ((KSycocaEntry *)(*itserv.current()));
149 TQStringList serviceTypeList = service->serviceTypes();
150 KServiceType::List serviceTypes;
151 TQStringList::ConstIterator it = serviceTypeList.begin();
152 for( ; it != serviceTypeList.end(); ++it )
153 {
154 (*it).toInt(&isNumber);
155 if (isNumber)
156 continue;
157
158 KServiceType::Ptr serviceType = KServiceType::serviceType(*it);
159 if (!serviceType)
160 {
161 // kdWarning() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl;
162 continue;
163 }
164 serviceTypes.append(serviceType);
165 }
166
167 while(serviceTypes.count())
168 {
169 KServiceType::Ptr serviceType = serviceTypes.first();
170 serviceTypes.pop_front();
171
172 KServiceType::Ptr parentType = serviceType->parentType();
173 if (parentType)
174 serviceTypes.append(parentType);
175
176 serviceType->addService(service);
177 }
178 }
179
180 // For each entry in servicetypeFactory
181 for(TQDictIterator<KSycocaEntry::Ptr> it ( *(m_serviceTypeFactory->entryDict()) );
182 it.current();
183 ++it)
184 {
185 // export associated services
186 KServiceType *entry = static_cast<KServiceType*>(static_cast<KSycocaEntry*>(*it.current()));
187 KService::List services = entry->services();
188
189 for(KService::List::ConstIterator it2 = services.begin();
190 it2 != services.end(); ++it2)
191 {
192 KService *service = *it2;
193 str << (TQ_INT32) entry->offset();
194 str << (TQ_INT32) service->offset();
195 }
196 }
197
198 str << (TQ_INT32) 0; // End of list marker (0)
199}
200
201void
202KBuildServiceFactory::saveInitList(TQDataStream &str)
203{
204 m_initListOffset = str.device()->at();
205
206 KService::List initList;
207
208 for(TQDictIterator<KSycocaEntry::Ptr> itserv ( *m_entryDict );
209 itserv.current();
210 ++itserv)
211 {
212 KService::Ptr service = (KService *) ((KSycocaEntry *) *itserv.current());
213 if ( !service->init().isEmpty() )
214 {
215 initList.append(service);
216 }
217 }
218 str << (TQ_INT32) initList.count(); // Nr of init services.
219 for(KService::List::Iterator it = initList.begin();
220 it != initList.end();
221 ++it)
222 {
223 str << (TQ_INT32) (*it)->offset();
224 }
225}
226
227void
228KBuildServiceFactory::addEntry(KSycocaEntry *newEntry, const char *resource)
229{
230 if (m_dupeDict.find(newEntry))
231 return;
232
233 KSycocaFactory::addEntry(newEntry, resource);
234
235 KService * service = (KService *) newEntry;
236 m_dupeDict.insert(newEntry, service);
237
238 if (!service->isDeleted())
239 {
240 TQString parent = service->parentApp();
241 if (!parent.isEmpty())
242 m_serviceGroupFactory->addNewChild(parent, resource, service);
243 }
244
245 TQString name = service->desktopEntryName();
246 m_nameDict->add( name, newEntry );
247 m_serviceDict.replace(name, service);
248
249 TQString relName = service->desktopEntryPath();
250 m_relNameDict->add( relName, newEntry );
251 TQString menuId = service->menuId();
252 if (!menuId.isEmpty())
253 m_menuIdDict->add( menuId, newEntry );
254}
KBuildServiceFactory::KBuildServiceFactory
KBuildServiceFactory(KSycocaFactory *serviceTypeFactory, KBuildServiceGroupFactory *serviceGroupFactory)
Create factory.
Definition: kbuildservicefactory.cpp:33
KBuildServiceFactory::save
virtual void save(TQDataStream &str)
Write out service specific index files.
Definition: kbuildservicefactory.cpp:112
KBuildServiceFactory::resourceTypes
static TQStringList resourceTypes()
Returns all resource types for this service factory.
Definition: kbuildservicefactory.cpp:50
KBuildServiceFactory::addEntry
void addEntry(KSycocaEntry *newEntry, const char *resource)
Add a new entry.
Definition: kbuildservicefactory.cpp:228
KBuildServiceFactory::saveHeader
virtual void saveHeader(TQDataStream &str)
Write out header information.
Definition: kbuildservicefactory.cpp:100
KBuildServiceFactory::createEntry
virtual KSycocaEntry * createEntry(const TQString &file, const char *resource)
Construct a KService from a config file.
Definition: kbuildservicefactory.cpp:67
KBuildServiceGroupFactory
Service group factory for building tdesycoca.
Definition: kbuildservicegroupfactory.h:31
KBuildServiceGroupFactory::addNewChild
KServiceGroup * addNewChild(const TQString &parent, const char *resource, KSycocaEntry *newEntry)
Adds the entry newEntry to the "parent group" parent, creating the group if necassery.
Definition: kbuildservicegroupfactory.cpp:121

kded

Skip menu "kded"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

kded

Skip menu "kded"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for kded by doxygen 1.9.4
This website is maintained by Timothy Pearson.