/* Copyright (c) 2002-2004 Jan Schaefer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SAMBAFILE_H #define SAMBAFILE_H #include #include #include #include #include "sambashare.h" class KSimpleConfig; class TDEProcess; class TDEConfig; class KTempFile; class SambaFile; class SambaFileLoadException { public: SambaFileLoadException(const TQString & msg) { message = msg; }; TQString getMessage() { return message; }; protected: TQString message; }; class SambaConfigFile : public TQDict { public: SambaConfigFile(SambaFile*); TQString getDefaultValue(const TQString & name); TQStringList getShareList(); void addShare(const TQString & name, SambaShare* share); SambaShare* addShare(const TQString & name); void removeShare(const TQString & name); protected: SambaFile* _sambaFile; TQStringList _shareList; }; class SambaFile : public TQObject { Q_OBJECT public: SambaFile(const TQString & _path, bool _readonly=true); ~SambaFile(); /** No descriptions */ TQString findShareByPath(const TQString & path) const; void removeShareByPath(const TQString & path); SambaShare* newShare(const TQString & name); SambaShare* newShare(const TQString & name, const TQString & path); SambaShare* newPrinter(const TQString & name, const TQString & printer); void removeShare(const TQString & share); void removeShare(SambaShare* share); void renameShare(const TQString & oldName, const TQString & newName); SambaShare* getShare(const TQString & share) const; /** * Returns a list of all shared directories **/ SambaShareList* getSharedDirs() const; /** * Returns a list of all shared printers **/ SambaShareList* getSharedPrinters() const; /** * Returns a name which isn't already used for a share * if the alreadyUsedName parameter is given, then * a name based on this name is returned. * E.g.: if public is already used, the method could return * public2 **/ TQString getUnusedName(const TQString alreadyUsedName=TQString()) const; /** * Returns all values of the global section * which are returned by the testparam program * if the values were already loaded then these * values are returned except the reload parameter * is true **/ SambaShare* getTestParmValues(bool reload=false); static TQString findSambaConf(); int getSambaVersion(); /** * Load all data from the smb.conf file * Can load a remote file **/ bool load(); bool save(); /** * Reads the local smb.conf */ bool openFile(); bool isRemoteFile(); /** * Save all data to the specified file * if successful returns true otherwise false **/ bool saveTo(const TQString & path); protected: bool readonly; bool changed; TQString path; TQString localPath; SambaConfigFile *_sambaConfig; SambaShare* _testParmValues; TQString _parmOutput; int _sambaVersion; void parseParmStdOutput(); SambaConfigFile* getSambaConfigFile(KSimpleConfig* config); KSimpleConfig* getSimpleConfig(SambaConfigFile* sambaConfig, const TQString & filename); private: void copyConfigs(TDEConfig* first, TDEConfig* second); KTempFile * _tempFile; public slots: /** * Saves all changes to the smb.conf file * if the user is not allowed she'll be asked * for a root password **/ bool slotApply(); protected slots: void testParmStdOutReceived(TDEProcess *proc, char *buffer, int buflen); void slotJobFinished( TDEIO::Job *); void slotSaveJobFinished( TDEIO::Job *); signals: void canceled(const TQString &); void completed(); }; #endif