diff options
Diffstat (limited to 'kiosktool/kioskrun.h')
-rw-r--r-- | kiosktool/kioskrun.h | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/kiosktool/kioskrun.h b/kiosktool/kioskrun.h new file mode 100644 index 0000000..c4cb8f8 --- /dev/null +++ b/kiosktool/kioskrun.h @@ -0,0 +1,229 @@ +/* + * kioskrun.h + * + * Copyright (C) 2004 Waldo Bastian <bastian@kde.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +#ifndef _KIOSKRUN_H_ +#define _KIOSKRUN_H_ + +#include <qdict.h> +#include <qobject.h> +#include <qregexp.h> +#include <qstringlist.h> +#include <qtimer.h> + +#include <dcopclient.h> +#include <dcopref.h> + +#include <kprogress.h> + +class ImmutableStatus; +class KConfig; +class KProcess; +class KSimpleConfig; + +class KioskGui; + +class KioskRun : public QObject +{ + friend class KioskGui; + + Q_OBJECT +public: + static KioskRun* self() { return s_self; } + + void setKdeDirs(const QStringList &dirs); + void setUser(const QString &user); + + QString homeDir() { return m_homeDir; } + QStringList kdeDirs() { return m_kdeDirs; } + QString desktopPath() { return m_desktopPath; } + + // Locate existing anywhere + QString locate(const char *resource, const QString &filename=QString::null); + + // Locate for saving + QString locateSave(const char *resource, const QString &filename=QString::null); + + // Locate for reading saved changed + QString locateLocal(const char *resource, const QString &filename=QString::null); + + // Prepare runtime environment for run() + bool prepare(); + + // Update sycoca database in runtime environment + void updateSycoca(); + + // Request sycoca update in install environment after flushing config files + void scheduleSycocaUpdate(); + + // Request sycoca update in install environment + void forceSycocaUpdate(); + + // Run a program inside the runtime test environment + KProcess* run(const QString &cmd, const QStringList &args=QStringList()); + + // A DCOPRef to make dcop calls into the runtime test environment + DCOPRef dcopRef(const QCString &appId, const QCString &objId); + + // A DCOPClient to make dcop calls into the runtime test environment + DCOPClient *dcopClient() { return m_dcopClient; } + + // Open config file in the install directory + KConfig *configFile(const QString &filename); + + // Make config files temporary mutable. + void makeMutable(bool bMutable); + + // Returns whether specific config group is immutable, + // or entire file if group is empty + bool isConfigImmutable(const QString &filename, const QString &group); + + // Make specific config group immutable, + // or entire file if group is empty + void setConfigImmutable(const QString &filename, const QString &group, bool bImmutable); + + // Close all opened config files. + bool flushConfigCache(); + + // Return all config files created by the user + QStringList newConfigFiles(); + + // Merge new settings from the test directory into the installation directory + void mergeConfigFile(const QString &filename); + + // Lookup the setting for a custom action + bool lookupCustomAction(const QString &action); + + // Change the setting for a custom action + void setCustomAction(const QString &action, bool checked); + + // Create installation directory and its parent dirs + bool createDir(const QString &dir); + + // Install file + bool install(const QString &file, const QString &destination); + + // Delete file + bool remove(const QString &destination); + + // Move file or directory + bool move(const QString &source, const QString &destination, const QStringList &files); + + // Delete directory in test home dir + void deleteDir(const QString &); + + // Open /etc/kderc for writing + KSimpleConfig *openKderc(); + + // Install new /etc/kderc + bool closeKderc(); + + // Read information of profile @p profile + void getProfileInfo(const QString &profile, QString &description, QString &installDir, QString &installUser); + + // Store information for profile @p profile + bool setProfileInfo(const QString &profile, const QString &description, const QString &installDir, const QString &installUser, bool b=false, bool deleteFiles=true); + + // Get new, non-existing, profile name + QString newProfile(); + + // Delete profile @p profile + bool deleteProfile(const QString &profile, bool deleteFiles = true); + + // Get list of all existing profiles + QStringList allProfiles(); + + // Maps a single group or user to a one or more profiles + typedef QMap<QString,QStringList> ProfileMapping; + + // Read mappings between groups/users and profiles + void getUserProfileMappings( ProfileMapping &groups, ProfileMapping &users, QStringList &groupOrder); + + // Store mappings between groups/users and profiles + bool setUserProfileMappings( const ProfileMapping &groups, const ProfileMapping &users, const QStringList &groupOrder); + + // Read profile prefix + QString getProfilePrefix(); + + // Store profile prefix + bool setProfilePrefix(const QString &prefix); + + // Create upload directory + bool createRemoteDir(const KURL &dir); + + // Create upload directory and all its parent dirs and be polite if ask = true + bool createRemoteDirRecursive(const KURL &dir, bool ask); + + // Upload file + bool uploadRemote(const QString &file, const KURL &dest); + +protected: + KioskRun( QObject* parent = 0, const char* name = 0); + ~KioskRun(); + + bool setupRuntimeEnv(); + void shutdownRuntimeEnv(); + void setupConfigEnv(); + void shutdownConfigEnv(); + void applyEnvironment(KProcess *p); + + QString saveImmutableStatus(const QString &filename); + bool restoreImmutableStatus(const QString &filename, bool force); + + void setCustomRestrictionFileBrowsing(bool restrict); + +private: + static KioskRun* s_self; + QString m_homeDir; + QString m_configDir; + QString m_desktopPath; + QString m_user; + QStringList m_kdeDirs; + QStringList m_xdgDataDirs; + QStringList m_xdgConfigDirs; + DCOPClient *m_dcopClient; + KInstance *m_instance; + KInstance *m_saveInstance; + QDict<KConfig> m_saveConfigCache; + QDict<ImmutableStatus> m_immutableStatusCache; + bool m_noRestrictions; + bool m_forceSycocaUpdate; + bool m_isRoot; + + QString m_kderc; + QString m_localKderc; + KSimpleConfig *m_localKdercConfig; +}; + + +class KioskRunProgressDialog : public KProgressDialog +{ + Q_OBJECT +public: + KioskRunProgressDialog(QWidget *parent, const char *name, + const QString &caption, const QString &text); +public slots: + void slotProgress(); + void slotFinished(); + +private: + QTimer m_timer; + int m_timeStep; +}; + + +#endif |