summaryrefslogtreecommitdiffstats
path: root/kded/DESIGN
diff options
context:
space:
mode:
Diffstat (limited to 'kded/DESIGN')
-rw-r--r--kded/DESIGN78
1 files changed, 78 insertions, 0 deletions
diff --git a/kded/DESIGN b/kded/DESIGN
new file mode 100644
index 000000000..702fca853
--- /dev/null
+++ b/kded/DESIGN
@@ -0,0 +1,78 @@
+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.