00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <QDir>
00029 #include <util/string.h>
00030
00031 #include "logfile.h"
00032
00033
00034
00035 LogFile::LogFile()
00036 {
00037 _file = 0;
00038 }
00039
00040
00041 LogFile::~LogFile()
00042 {
00043 if (_file) {
00044 delete _file;
00045 }
00046 }
00047
00048
00049 bool
00050 LogFile::createPathToFile(QString filename)
00051 {
00052 QDir dir = QFileInfo(filename).absoluteDir();
00053 if (!dir.exists()) {
00054 return dir.mkpath(dir.absolutePath());
00055 }
00056 return true;
00057 }
00058
00059
00060 bool
00061 LogFile::open(QString filename, QString *errmsg)
00062 {
00063 QFile *newLogFile;
00064
00065
00066 if (_file && _file->isOpen()) {
00067 if (_file->fileName() == filename) {
00068 return true;
00069 }
00070 }
00071
00072
00073 if (!createPathToFile(filename)) {
00074 return err(errmsg, "Unable to create path to log file.");
00075 }
00076
00077
00078 newLogFile = new QFile(filename);
00079 if (!newLogFile->open(QFile::WriteOnly|QIODevice::Append|QIODevice::Text)) {
00080 delete newLogFile;
00081 return err(errmsg, newLogFile->errorString());
00082 }
00083
00084
00085 if (_file) {
00086 delete _file;
00087 }
00088 _file = newLogFile;
00089 _stream.setDevice(_file);
00090 return true;
00091 }
00092
00093
00094 void
00095 LogFile::close()
00096 {
00097 if (_file) {
00098 delete _file;
00099 _file = 0;
00100 }
00101 }
00102
00103
00104 bool
00105 LogFile::isOpen()
00106 {
00107 return (_file && _file->isOpen());
00108 }
00109
00110
00111 QString
00112 LogFile::filename()
00113 {
00114 return (_file ? _file->fileName() : QString());;
00115 }
00116
00117
00118 LogFile&
00119 LogFile::operator<<(const QString &s)
00120 {
00121 if (_file) {
00122 _stream << s;
00123 _stream.flush();
00124 }
00125 return *this;
00126 }
00127