todo module command parsing works

This commit is contained in:
Anselme 2015-08-25 13:21:12 +02:00
parent 085d5cd193
commit 32aa05de42
4 changed files with 107 additions and 24 deletions

View File

@ -6,6 +6,7 @@
#include "sparrowmodule.h" #include "sparrowmodule.h"
#include "poilaumodule.h" #include "poilaumodule.h"
#include "fourasmodule.h" #include "fourasmodule.h"
#include "todomodule.h"
class HelloWorldModule : public Module class HelloWorldModule : public Module
{ {
@ -36,5 +37,6 @@ int main(int argc, char *argv[])
app.addModule(new SparrowModule()); app.addModule(new SparrowModule());
app.addModule(new PoilAuModule()); app.addModule(new PoilAuModule());
app.addModule(new FourasModule()); app.addModule(new FourasModule());
app.addModule(new TodoModule());
return app.exec(); return app.exec();
} }

View File

@ -28,7 +28,7 @@ bool SparrowModule::messageHandler(Message msg)
} }
else if(msg.args.compare("!version") == 0) else if(msg.args.compare("!version") == 0)
{ {
answer = say("sparrowModule v1.0"); answer = say("sparrowModule v1.1");
return true; return true;
} }
else if(msg.args.compare("re", Qt::CaseInsensitive) == 0) else if(msg.args.compare("re", Qt::CaseInsensitive) == 0)

View File

@ -2,6 +2,7 @@
#include "message.h" #include "message.h"
#include <time.h> #include <time.h>
#include <QStringList> #include <QStringList>
#include <QDateTime>
TodoModule::TodoModule() TodoModule::TodoModule()
{ {
@ -18,26 +19,121 @@ bool TodoModule::messageHandler(Message msg)
Task t; Task t;
int deltaIndex = 1; int deltaIndex = 1;
t.isPrivate = !msg.target.contains(getChan()); t.isPrivate = !msg.target.contains(getChan());
t.emitter = msg.nick; t.recipient = msg.nick;
t.date = time(NULL); t.repeat = 0;
QStringList splitter = msg.args.split(' '); QStringList splitter = msg.args.split(' ');
if(splitter[deltaIndex].compare("to") == 0) if(splitter[deltaIndex].compare("to") == 0)
{ {
deltaIndex += 2; deltaIndex += 2;
t.emitter = splitter[2]; t.recipient = splitter[2];
} }
if(splitter.size() < deltaIndex+2) if(splitter.size() < deltaIndex+2)
return true; return true;
QString dateString = splitter[deltaIndex]; QString dateString = splitter[deltaIndex];
QStringList dateSplitter;
bool ok;
if(dateString.startsWith("date(")) if(dateString.startsWith("date("))
{ {
//t.date += dateString; answer = usage(DATE);
dateString = dateString.mid(5, dateString.size() - 6);
dateSplitter = dateString.split('/');
if(dateSplitter.size() < 2)
return true;
int day = dateSplitter[0].toUInt(&ok);
if(!ok || day > 31 || day < 1) return true;
dateSplitter = dateSplitter[1].split('-');
int month = dateSplitter[0].toUInt(&ok);
if(!ok || month > 12 || month < 1) return true;
int hours = 0;
int minutes = 0;
int seconds = 0;
if(dateSplitter.size() > 1)
{
dateSplitter = dateSplitter[1].split(':');
hours = dateSplitter[0].toUInt(&ok);
if(!ok || hours > 23) return true;
if(dateSplitter.size() > 1)
{
minutes = dateSplitter[1].toUInt(&ok);
if(!ok || minutes > 59) return true;
}
if(dateSplitter.size() > 2)
{
seconds = dateSplitter[2].toUInt(&ok);
if(!ok || seconds > 59) return true;
}
}
QDateTime date(QDate(QDate::currentDate().year(), month, day), QTime(hours, minutes, seconds));
t.date = date.toTime_t();
} }
else else
{ {
answer = usage(DURATION);
dateSplitter = dateString.split(':');
int hours = dateSplitter[0].toUInt(&ok);
int minutes = 0;
int seconds = 0;
if(!ok) return true;
if(dateSplitter.size() > 1)
{
minutes = dateSplitter[1].toUInt(&ok);
if(!ok || minutes > 59) return true;
}
if(dateSplitter.size() > 2)
{
seconds = dateSplitter[2].toUInt(&ok);
if(!ok || seconds > 59) return true;
}
QDateTime date = QDateTime::currentDateTime();
minutes += hours*60;
seconds += minutes*60;
date.addSecs(seconds);
t.date = date.toTime_t();
} }
++deltaIndex;
if(splitter[deltaIndex].compare("every") == 0)
{
answer = usage(DURATION);
dateSplitter = dateString.split(':');
int hours = dateSplitter[0].toUInt(&ok);
int minutes = 0;
int seconds = 0;
if(!ok) return true;
if(dateSplitter.size() > 1)
{
minutes = dateSplitter[1].toUInt(&ok);
if(!ok || minutes > 59) return true;
}
if(dateSplitter.size() > 2)
{
seconds = dateSplitter[2].toUInt(&ok);
if(!ok || seconds > 59) return true;
}
minutes += hours*60;
seconds += minutes*60;
t.repeat = seconds;
deltaIndex += 2;
}
QString desc;
bool first = true;
for(int i=deltaIndex; i<splitter.size(); ++i)
{
if(first)
first = false;
else
desc.append(" ");
desc.append(splitter[i]);
}
t.description = desc;
t.emitter = msg.nick;
tasks.push_back(t);
answer = say(QString("todo successfully added : from %1 to %2 triggering the %3, repeating every %4 seconds, and diplaying this message : %5")
.arg(t.emitter)
.arg(t.recipient)
.arg(QDateTime::fromTime_t(t.date).toString())
.arg((int)(t.repeat))
.arg(t.description));
return true;
} }
} }
return false; return false;
@ -47,26 +143,13 @@ QString TodoModule::usage(int type)
{ {
switch(type) switch(type)
{ {
default:
case TODO: case TODO:
return say("usage = !todo [to TARGET] DATE | DURATION [every DURATION] DESCRIPTION"); return say("usage = !todo [to TARGET] DATE | DURATION [every DURATION] DESCRIPTION");
case DURATION: case DURATION:
return say("DURATION = HOURS[:MINUTES[:SECONDS]]"); return say("DURATION = HOURS[:MINUTES[:SECONDS]]");
case DATE: case DATE:
return say("DATE = date(DAY/MONTH-[HOUR[:MINUTE[:SECOND]]])"); return say("DATE = date(DAY/MONTH[-HOUR[:MINUTE[:SECOND]]])");
} }
} }
void TodoModule::addTask(unsigned long date, unsigned long repeat, QString description, QString emitter, QString recipient, bool isPrivate)
{
Task t;
t.date = date;
t.description = description;
t.emitter = emitter;
t.recipient = recipient;
t.repeat = repeat;
t.isPrivate = isPrivate;
tasks.push_back(t);
// TODO -> append it to save file
}

View File

@ -27,8 +27,6 @@ public:
virtual bool messageHandler(Message msg); virtual bool messageHandler(Message msg);
virtual QString getName() {return "todo";} virtual QString getName() {return "todo";}
void addTask(unsigned long date, unsigned long repeat, QString description, QString emitter, QString recipient, bool isPrivate);
}; };
#endif // TODOMODULE_H #endif // TODOMODULE_H