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 QString path = filename.left(filename.lastIndexOf(QDir::separator()));
00053 QDir dir(path);
00054 if (!dir.exists()) {
00055 return dir.mkpath(path);
00056 }
00057 return true;
00058 }
00059
00060
00061 bool
00062 LogFile::open(QString filename, QString *errmsg)
00063 {
00064 QFile *newLogFile;
00065
00066
00067 if (_file && _file->isOpen()) {
00068 if (_file->fileName() == filename) {
00069 return true;
00070 }
00071 }
00072
00073
00074 if (!createPathToFile(filename)) {
00075 return err(errmsg, "Unable to create path to log file.");
00076 }
00077
00078
00079 newLogFile = new QFile(filename);
00080 if (!newLogFile->open(QFile::WriteOnly|QIODevice::Append|QIODevice::Text)) {
00081 delete newLogFile;
00082 return err(errmsg, newLogFile->errorString());
00083 }
00084
00085
00086 if (_file) {
00087 delete _file;
00088 }
00089 _file = newLogFile;
00090 _stream.setDevice(_file);
00091 return true;
00092 }
00093
00094
00095 void
00096 LogFile::close()
00097 {
00098 if (_file) {
00099 delete _file;
00100 _file = 0;
00101 }
00102 }
00103
00104
00105 bool
00106 LogFile::isOpen()
00107 {
00108 return (_file && _file->isOpen());
00109 }
00110
00111
00112 QString
00113 LogFile::filename()
00114 {
00115 return (_file ? _file->fileName() : QString());;
00116 }
00117
00118
00119 LogFile&
00120 LogFile::operator<<(const QString &s)
00121 {
00122 if (_file) {
00123 _stream << s;
00124 _stream.flush();
00125 }
00126 return *this;
00127 }
00128