00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00029 #ifndef _HALBACKEND_H_
00030 #define _HALBACKEND_H_
00031
00032 #include "backendbase.h"
00033
00034 #include <tqobject.h>
00035 #include <tqstringlist.h>
00036 #include <tqstring.h>
00037
00038 #include <config.h>
00039
00040
00041 #define DBUS_API_SUBJECT_TO_CHANGE
00042
00043 #include <dbus/connection.h>
00044
00045 #include <libhal.h>
00046 #include <libhal-storage.h>
00047
00048 namespace KIO {
00049 class Job;
00050 }
00051
00052 class HALBackend : public TQObject, public BackendBase
00053 {
00054 Q_OBJECT
00055
00056 public:
00060 HALBackend(MediaList &list, TQObject* parent);
00061
00065 ~HALBackend();
00066
00072 bool InitHal();
00073
00079 bool ListDevices();
00080
00081 TQStringList mountoptions(const TQString &id);
00082
00083 bool setMountoptions(const TQString &id, const TQStringList &options);
00084
00085 TQString mount(const TQString &id);
00086 TQString mount(const Medium *medium);
00087 TQString unmount(const TQString &id);
00088 TQString decrypt(const TQString &id, const TQString &password);
00089 TQString undecrypt(const TQString &id);
00090
00091 private:
00099 void AddDevice(const char* udi, bool allowNotification=true);
00100
00106 void RemoveDevice(const char* udi);
00107
00113 void ModifyDevice(const char *udi, const char* key);
00114
00121 void DeviceCondition(const char *udi, const char *condition);
00122
00126 void MainLoopIntegration(DBusConnection *dbusConnection);
00127
00128
00129 private:
00133 void ResetProperties(const char* MediumUdi, bool allowNotification=false);
00134
00138 const char* findMediumUdiFromUdi(const char* udi);
00139
00140 void setVolumeProperties(Medium* medium);
00141 bool setFloppyProperties(Medium* medium);
00142 void setFloppyMountState( Medium* medium );
00143 bool setFstabProperties(Medium* medium);
00144 void setCameraProperties(Medium* medium);
00145 TQString generateName(const TQString &devNode);
00146 static TQString isInFstab(const Medium *medium);
00147 static TQString listUsingProcesses(const Medium *medium);
00148 static TQString killUsingProcesses(const Medium *medium);
00149
00150 private slots:
00151 void slotResult(KIO::Job *job);
00152
00153
00154 public:
00160 static void hal_device_added(LibHalContext *ctx, const char *udi);
00161
00167 static void hal_device_removed(LibHalContext *ctx, const char *udi);
00168
00176 static void hal_device_property_modified(LibHalContext *ctx, const char *udi, const char *key,
00177 dbus_bool_t is_removed, dbus_bool_t is_added);
00178
00185 static void hal_device_condition(LibHalContext *ctx, const char *udi,
00186 const char *condition_name,
00187 const char* message
00188 );
00189
00190
00191 private:
00195 LibHalContext* m_halContext;
00196
00200 LibHalStoragePolicy* m_halStoragePolicy;
00201
00205 DBusQt::Connection* m_dBusQtConnection;
00206
00210 TQObject* m_parent;
00211
00212 DBusConnection *dbus_connection;
00213
00217 struct mount_job_data {
00218
00219 const Medium* medium;
00220
00221 bool completed;
00222
00223 int error;
00224
00225 TQString errorMessage;
00226 };
00227
00228 TQMap<KIO::Job *, struct mount_job_data*> mount_jobs;
00229 };
00230
00231 #endif