diff options
Diffstat (limited to 'src/ctcron.h')
-rw-r--r-- | src/ctcron.h | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/src/ctcron.h b/src/ctcron.h new file mode 100644 index 0000000..b8d03fe --- /dev/null +++ b/src/ctcron.h @@ -0,0 +1,154 @@ +/*************************************************************************** + * CT Cron Header * + * -------------------------------------------------------------------- * + * Copyright (C) 1999, Gary Meyer <[email protected]> * + * -------------------------------------------------------------------- * + * 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. * + ***************************************************************************/ + +#ifndef CTCRON_H +#define CTCRON_H + +// Do not introduce any Qt or KDE dependencies into the "CT"-prefixed classes. +// I want to be able to reuse these classes with another GUI toolkit. -GM 11/99 + +#include <vector> +#include <string> +#include <iostream> + +#include <qstring.h> // Anarchy! -WABA + +class CTException; +class CTTask; +class CTVariable; + +struct passwd; + +/** + * A user (encapsulation of a single crontab file). Encapsulates + * file i/o, parsing, tokenization, and natural language description. + */ +class CTCron +{ +public: + +/** + * Constructs the scheduled tasks, environment variables from crontab + * files and obtains some information about the user from the system. + * + * Default is to construct from the user's crontab. Can also be called, + * passing TRUE, to construct from the system crontab. Throws an + * exception if the crontab file can not be found, read, or parsed. + */ + CTCron(bool _syscron = false, std::string _login = ""); +/** + * If you already have a struct passwd, use it instead. This + * is never used for the system crontab. + */ + CTCron(const struct passwd * _login = 0L); + +/** + * Copy one user's tasks and environement variables to another user. + */ + void operator = (const CTCron& source); + +/** + * Parses crontab file format. + */ + friend std::istream& operator >> (std::istream& inputStream, CTCron& cron); + +/** + * Tokenizes to crontab file format. + */ + friend std::ostream& operator << (std::ostream& outputStream, const CTCron& cron); + +/** + * Apply changes. + */ + void apply(); + +/** + * Cancel changes. + */ + void cancel(); + +/** + * Indicates whether or not dirty. + */ + bool dirty(); + +/** + * Returns the PATH environment variable value. A short cut to iterating + * the tasks vector. + */ + std::string path() const; + + /** + * Returns whether an error has occured + */ + bool isError() { return !error.isEmpty(); } + + /** + * Return error description + */ + QString errorMessage() { QString r = error; error = QString::null; return r; } + + +/** + * Indicates whether or not the crontab belongs to the system. + */ + const bool syscron; + +/** + * User login. + */ + std::string login; + +/** + * User real name. + */ + std::string name; + +/** + * User's scheduled tasks. + */ + std::vector<CTTask *> task; + +/** + * User's environment variables. Note: These are only environment variables + * found in the user's crontab file and does not include any set in a + * login or shell script such as ".bash_profile". + */ + std::vector<CTVariable *> variable; + +/** + * Destructor. + */ + ~CTCron(); + +private: + +/** + * Can't copy a user! + */ + CTCron(const CTCron& source); + + unsigned int initialTaskCount; + unsigned int initialVariableCount; + QString writeCommand; + QString tmpFileName; + + QString error; + +protected: + // Initialize member variables from the struct passwd. + bool initFromPasswd(const struct passwd *); +}; + +typedef std::vector<CTTask*>::iterator CTTaskIterator; +typedef std::vector<CTVariable*>::iterator CTVariableIterator; + +#endif // CTCRON_H |