/* Copyright (C) 2000, 2001, 2002 Dawit Alemayehu 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 __RSYNC_PLUGIN_H #define __RSYNC_PLUGIN_H #include #include #include #include #include #include #include #include #include #include "rsyncconfigdialog.h" // NOTE: If ANY of these functions are not utilized in the C file, // and in a manner identical to these declarations, the plugin will // mysteriously fail when launched with kshell but work fine under BASH class KActionMenu; class KonqDirPart; class KLineEdit; namespace KParts { struct URLArgs; } class RsyncPlugin : public KParts::Plugin { Q_OBJECT public: RsyncPlugin (QObject* parent, const char* name, const QStringList &); virtual ~RsyncPlugin(); protected: void loadSettings(); void saveSettings(); QString findLocalFolderByName(QString folderurl); int deleteLocalFolderByName(QString folderurl); int addLocalFolderByName(QString folderurl, QString remoteurl, QString syncmethod, QString excludelist); QString findSyncMethodByName(QString folderurl); /** manages initial communication setup including password queries */ int establishConnectionRsync(char *buffer, KIO::fileoffset_t len); /** manages initial communication setup including password queries */ int establishConnectionUnison(char *buffer, KIO::fileoffset_t len, QString localfolder, QString remotepath); /** creates the unidirectional sync subprocess */ bool syncUnidirectional(QString synccommand, QString syncflags, int parameter_order, QString localfolder, QString remotepath); /** creates the bidirectional sync subprocess */ bool syncBidirectional(QString synccommand, QString syncflags, int parameter_order, QString localfolder, QString remotepath); /** writes one chunk of data to stdin of child process */ void writeChild(const char *buf, KIO::fileoffset_t len); /** AuthInfo object used for logging in */ KIO::AuthInfo connectionAuth; /** Clean up connection */ void shutdownConnection(bool forced=false, bool wait=false); /** Forced close of the connection */ void closeConnection(); private slots: void slotSync(); void slotSetup(); void slotOpenURL(); void slotSetupOK(); void slotSetupCancelled(); void slotRsyncCancelled(); void slotUnisonCancelled(); private: KURL m_pURL; KonqDirPart* m_part; KAction* m_pSyncNow; KAction* m_pSyncSetup; KProgressBoxDialog* m_progressDialog; RsyncConfigDialog* m_configDialog; QStringList cfgfolderlist; bool m_progressDialogExists; bool m_bSettingsLoaded; /** true if connection is logged in successfully */ bool isLoggedIn; /** the rsync process used to communicate with the remote end */ pid_t childPid; /** fd for reading and writing to the process */ int childFd; /** buffer for data to be written */ const char *outBuf; /** current write position in buffer */ KIO::fileoffset_t outBufPos; /** length of buffer */ KIO::fileoffset_t outBufLen; /** use su if true else use ssh */ //bool local; /** // FIXME: just a workaround for konq deficiencies */ bool isStat; /** // FIXME: just a workaround for konq deficiencies */ QString redirectUser, redirectPass; /** user name of current connection */ QString connectionUser; /** password of current connection */ QString connectionPassword; /** true if this is the first login attempt (== use cached password) */ bool firstLogin; QString thisFn; }; #endif