You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kded/DESIGN

79 lines
2.4 KiB

kded
====
kded is responsible for creating the sycoca file, i.e. the binary
cache of servicetypes, mimetypes and services, for a particular user.
It uses KDirWatch to monitor the directories contain the .desktop files.
When a file is added/removed, it waits 5 seconds (in case of series of
updates), and then launches kbuildsycoca.
kbuildsycoca recreates the sycoca file by:
* parsing all .desktop files, replacing global ones by local ones (at any
level of the hierarchy)
* creating all objects in memory
* saving everything in the sycoca file (see below for ksycoca internals)
* clearing all memory
* notifying the applications that use ksycoca by a DCOP call to the ksycoca
object (KSycoca::notifyDatabaseChanged()).
Format of the sycoca database file
==================================
List of factories
| * Factory id, Factory offset
| * Factory id, Factory offset
| * ...
| * 0
Header
| * Offer-list offset
| * Mimetype-patterns index offset (fast patterns)
| * Mimetype-patterns index offset (other)
| * Entry size in the mimetype-patterns index ("fast" part)
For each factory
| * offset of the dict
| KSycocaEntries
| | * entry type
| | Entry
| | | entry-dependent information
| | ...
| |
| Dict
| | * hashtable size
| | Hash list
| | | * list of values used to compute a hash key
| | Hash table
| | | * id (positive = entry offset)
| | | * id (negative = - offset in duplicates list )
| | | * 0 if no entry for that hash value
| | Table of duplicates
| | | * entry offset, key
| | | * entry offset, key
|
Offer list
| * servicetype offset, service offset
| * servicetype offset, service offset
| * servicetype offset, service offset
| * servicetype offset, service offset
| * 0
This allows to quickly find services associated with a servicetype.
It does NOT reflect the user profile, which is stored in profilerc and
implemented in KServiceTypeProfile.
Mimetype patterns
| Fast patterns (fixed size)
| * Extension (padded to 4 chars), mimetype offset
| * Extension (padded to 4 chars), mimetype offset
| * Extension (padded to 4 chars), mimetype offset
| Other patterns (variable size)
| * Pattern (ex : *.*gf), mimetype offset
| * Pattern (ex : Makefile*), mimetype offset
| * ""
The first one is designed for a binary search, since entries have a fixed size
and are sorted by extension.
The second one (10% of the mimetypes usually) is for a linear search.