summaryrefslogtreecommitdiffstats
path: root/tdecore/tdesycoca.h
blob: a96bd9d9f6f9ad52722e8a01f1717706c85f1e5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/*  This file is part of the KDE libraries
 *  Copyright (C) 1999 Waldo Bastian <bastian@kde.org>
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License version 2 as published by the Free Software Foundation;
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public License
 *  along with this library; see the file COPYING.LIB.  If not, write to
 *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 *  Boston, MA 02110-1301, USA.
 **/

#ifndef __tdesycoca_h__
#define __tdesycoca_h__

#include <dcopobject.h>
#include <tqobject.h>
#include <tqstringlist.h>
#include "tdesycocatype.h"
#include <tdelibs_export.h>

class TQDataStream;
class KSycocaPrivate;
class KSycocaFactory;
class KSycocaFactoryList;

/*
 * Sycoca file version number.
 * If the existing file is outdated, it will not get read
 * but instead we'll ask kded to regenerate a new one...
*/
#define TDESYCOCA_VERSION 94

/**
 * @internal
 * Read-only SYstem COnfiguration CAche
 */
class TDECORE_EXPORT KSycoca : public TQObject, public DCOPObject
{
  TQ_OBJECT
  K_DCOP

protected:
   /**
    * @internal
    * Building database
    */
   KSycoca( bool /* buildDatabase */ );

public:

   /**
    * Read-only database
    */
   KSycoca();

   /**
    * Get or create the only instance of KSycoca (read-only)
    */
   static KSycoca *self();

   virtual ~KSycoca();

   static int version();

   /**
    * @internal - called by factories in read-only mode
    * This is how factories get a stream to an entry
    */
   TQDataStream *findEntry(int offset, KSycocaType &type);
   /**
    * @internal - called by factories in read-only mode
    */
   TQDataStream *findFactory( KSycocaFactoryId id);
   /**
    * @internal - returns kfsstnd stored inside database
    */
   TQString kfsstnd_prefixes();
   /**
    * @internal - returns language stored inside database
    */
   TQString language();

   /**
    * @internal - returns timestamp of database
    *
    * The database contains all changes made _before_ this time and
    * _might_ contain changes made after that.
    */
   TQ_UINT32 timeStamp();

   /**
    * @internal - returns update signature of database
    *
    * Signature that keeps track of changes to
    * $TDEDIR/share/services/update_tdesycoca
    *
    * Touching this file causes the database to be recreated
    * from scratch.
    */
   TQ_UINT32 updateSignature();

   /**
    * @internal - returns all directories with information
    * stored inside sycoca.
    */
   TQStringList allResourceDirs();

   /**
    * @internal - add a factory
    */
   void addFactory( KSycocaFactory * );

   /**
    * @internal
    * @return true if building (i.e. if a KBuildSycoca);
    */
   virtual bool isBuilding() { return false; }

   /**
    * @internal - disables launching of tdebuildsycoca
    */
   void disableAutoRebuild();

   /**
    * Determine relative path for a .desktop file from a full path and a resource name
    */
   static TQString determineRelativePath( const TQString & _fullpath, const char *_resource );

   /**
    * When you receive a "databaseChanged" signal, you can query here if
    * a change has occurred in a specific resource type.
    * @see TDEStandardDirs for the various resource types.
    */
   static bool isChanged(const char *type);

   /**
    * A read error occurs.
    */
   static void flagError();

   /**
    * Returns read error status and clears flag.
    */
   static bool readError();

k_dcop:
   /**
    * internal function for receiving kded/tdebuildsycoca's signal, when the sycoca file changes
    */
   void notifyDatabaseChanged(const TQStringList &);

signals:
   /**
        * Connect to this to get notified when the database changes
        * (Usually apps showing icons do a 'refresh' to take into account the new mimetypes)
        */
   void databaseChanged();

protected:
   bool checkVersion(bool abortOnError=true);
   bool openDatabase(bool openDummyIfNotFound=true);
   void closeDatabase();
   KSycocaFactoryList *m_lstFactories;
   TQDataStream *m_str;
   TQByteArray *m_barray;
   bool bNoDatabase;
   size_t m_sycoca_size;
   const char *m_sycoca_mmap;
   TQ_UINT32 m_timeStamp;

public:
   static KSycoca *_self; // Internal use only.

protected:
  virtual void virtual_hook( int id, void* data );
private:
   KSycocaPrivate *d;
};

#endif