kdelibs/kded/DESIGN
Ivailo Monev d4fb9c2bb2 generic: remove KService profile feature
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2021-06-15 15:26:19 +03:00

91 lines
2.6 KiB
Text

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 containing .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 DBUS signal emitted to
the ksycoca object (KSycoca::notifyDatabaseChanged()).
Format of the sycoca database file
==================================
* Version
List of factories
| * Factory id, Factory offset
| * Factory id, Factory offset
| * ...
| * 0
* KDE prefixes
* timestamp
* KDE language
* resource hash
* list of all resource dirs
For each factory
| Header
| * offset of the dict
| * offset of the beginning of the entries
| * offset of the end of the entries
| Rest of the header (factory-specific), for instance:
| * Offer-list offset
| * Mimetype-patterns index offset (fast patterns)
| * Mimetype-patterns index offset (other)
| * Entry size in the mimetype-patterns index ("fast" part)
|
| 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
| * mimetype offset, service offset
| * mimetype offset, service offset
| * mimetype offset, service offset
| * mimetype offset, service offset
| * 0
This allows to quickly find services associated with a servicetype.
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.