mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-24 10:52:53 +00:00
308 lines
8.7 KiB
C++
308 lines
8.7 KiB
C++
/*
|
|
* Copyright 2009 Andrew Stromme <astromme@chatonka.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Library General Public License as
|
|
* published by the Free Software Foundation; either version 2, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program 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 General Public License for more details
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this program; if not, write to the
|
|
* Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "task.h"
|
|
#include "task_p.h"
|
|
|
|
#include <QtDebug>
|
|
|
|
#include "request.h"
|
|
#include "session.h"
|
|
#include "xmlreaders.h"
|
|
|
|
RTM::Task::Task(RTM::Session* session)
|
|
: QObject(session),
|
|
d(new TaskPrivate(this))
|
|
{
|
|
d->session = session;
|
|
}
|
|
|
|
RTM::Task::~Task() {
|
|
delete d;
|
|
}
|
|
|
|
QDateTime RTM::Task::completed() const {
|
|
return d->completed;
|
|
}
|
|
QDateTime RTM::Task::deleted() const {
|
|
return d->deleted;
|
|
}
|
|
QDateTime RTM::Task::due() const {
|
|
return d->due;
|
|
}
|
|
QString RTM::Task::estimate() const {
|
|
return d->estimate;
|
|
}
|
|
RTM::TaskId RTM::Task::id() const {
|
|
return d->taskId;
|
|
}
|
|
bool RTM::Task::isCompleted() const {
|
|
return d->completed.isValid();
|
|
}
|
|
bool RTM::Task::isDeleted() const {
|
|
return d->deleted.isValid();
|
|
}
|
|
RTM::ListId RTM::Task::listId() const {
|
|
return d->listId;
|
|
}
|
|
RTM::LocationId RTM::Task::locationId() const {
|
|
return d->locationId;
|
|
}
|
|
QString RTM::Task::name() const {
|
|
return d->name;
|
|
}
|
|
Notes RTM::Task::notes() const {
|
|
return d->notes;
|
|
}
|
|
int RTM::Task::priority() const {
|
|
return d->priority;
|
|
}
|
|
QString RTM::Task::repeatString() const {
|
|
return d->repeatString;
|
|
}
|
|
RTM::TaskSeriesId RTM::Task::seriesId() const {
|
|
return d->seriesId;
|
|
}
|
|
QStringList RTM::Task::tags() const {
|
|
return QStringList(d->tags);
|
|
}
|
|
QString RTM::Task::url() const {
|
|
return d->url;
|
|
}
|
|
|
|
int RTM::Task::decreasePriority() {
|
|
d->priority--;
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.movePriority");
|
|
request->addArgument("direction", "down");
|
|
request->sendRequest();
|
|
return d->priority;
|
|
}
|
|
int RTM::Task::increasePriority() {
|
|
d->priority++;
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.movePriority");
|
|
request->addArgument("direction", "up");
|
|
request->sendRequest();
|
|
return d->priority;
|
|
}
|
|
void RTM::Task::setCompleted(bool completed) {
|
|
if (isCompleted() == completed)
|
|
return;
|
|
|
|
RTM::Request *request;
|
|
if (completed) {
|
|
d->completed = QDateTime::currentDateTime();
|
|
request = d->standardRequest("rtm.tasks.complete");
|
|
}
|
|
else {
|
|
d->completed = QDateTime();
|
|
request = d->standardRequest("rtm.tasks.uncomplete");
|
|
}
|
|
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setDeleted(bool deleted) {
|
|
if (isDeleted() == deleted)
|
|
return;
|
|
|
|
RTM::Request *request;
|
|
if (deleted) {
|
|
d->deleted = QDateTime::currentDateTime();
|
|
request = d->standardRequest("rtm.tasks.delete");
|
|
}
|
|
else {
|
|
qDebug() << "ERROR: RTM Does not allow undeleting tasks!";
|
|
d->deleted = QDateTime();
|
|
request = d->standardRequest("rtm.tasks.undelete");
|
|
}
|
|
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setList(RTM::ListId listId) {
|
|
RTM::ListId oldlist = d->listId;
|
|
d->listId = listId;
|
|
|
|
RTM::Request *request = d->session->request("rtm.tasks.moveTo");
|
|
request->addArgument("timeline", QString::number(d->session->getTimeline()));
|
|
request->addArgument("from_list_id", QString::number(oldlist));
|
|
request->addArgument("to_list_id", QString::number(listId));
|
|
request->addArgument("taskseries_id", QString::number(d->seriesId));
|
|
request->addArgument("task_id", QString::number(d->taskId));
|
|
}
|
|
void RTM::Task::postpone() {
|
|
//WARNING: Doesn't update task, only sends network request
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.postpone");
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::addTag(const RTM::Tag& tag) {
|
|
if (d->tags.contains(tag))
|
|
return;
|
|
d->tags.append(tag);
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.addTags");
|
|
request->addArgument("tags", tag);
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::removeAllTags() {
|
|
d->tags.clear();
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setTags");
|
|
request->addArgument("tags", "");
|
|
request->sendRequest();
|
|
}
|
|
bool RTM::Task::removeTag(const RTM::Tag& tag) {
|
|
if (!d->tags.contains(tag))
|
|
return false;
|
|
d->tags.removeAll(tag);
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.removeTags");
|
|
request->addArgument("tags", tag);
|
|
request->sendRequest();
|
|
return true;
|
|
}
|
|
void RTM::Task::setTags(const QStringList &tags) {
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setTags");
|
|
request->addArgument("tags", tags.join(","));
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setNotes(const Notes& notes) {
|
|
Q_UNUSED(notes)
|
|
qDebug() << "NOT IMPLEMENTED"; //FIXME Implement
|
|
}
|
|
void RTM::Task::addNote(const QString& title, const QString& text) {
|
|
//notes.insert(note.getId(), note);
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.notes.add");
|
|
request->addArgument("note_title", title);
|
|
request->addArgument("note_text", text);
|
|
request->sendRequest();
|
|
}
|
|
bool RTM::Task::editNote(RTM::NoteId noteid, const QString& newTitle, const QString& newText) {
|
|
if (!d->notes.contains(noteid))
|
|
return false;
|
|
|
|
RTM::Request *request = d->session->request("rtm.tasks.notes.edit"); // Only a simple request is needed
|
|
request->addArgument("timeline", QString::number(d->session->getTimeline()));
|
|
request->addArgument("note_id", QString::number(noteid));
|
|
request->addArgument("note_title", newTitle);
|
|
request->addArgument("note_text", newText);
|
|
request->sendRequest();
|
|
return true;
|
|
}
|
|
void RTM::Task::removeAllNotes() {
|
|
QList<RTM::NoteId> keys = d->notes.keys();
|
|
foreach(const RTM::NoteId &id, keys)
|
|
removeNote(id);
|
|
}
|
|
bool RTM::Task::removeNote(RTM::NoteId noteid) {
|
|
if (!d->notes.contains(noteid))
|
|
return false;
|
|
|
|
RTM::Request *request = d->session->request("rtm.tasks.notes.delete"); // Only a simple request is needed
|
|
request->addArgument("timeline", QString::number(d->session->getTimeline()));
|
|
request->addArgument("note_id", QString::number(noteid));
|
|
request->sendRequest();
|
|
return true;
|
|
}
|
|
void RTM::Task::setDue(const QDateTime& due) {
|
|
if (d->due == due)
|
|
return;
|
|
d->due = due;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setDueDate");
|
|
if (due.isValid()) {
|
|
request->addArgument("due", d->due.toString(Qt::ISODate));
|
|
request->addArgument("parse", "1");
|
|
if (due.time().isValid())
|
|
request->addArgument("has_due_time", "1");
|
|
}
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setDue(const QString& date) {
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setDueDate");
|
|
request->addArgument("due", date);
|
|
request->addArgument("parse", "1");
|
|
request->sendRequest();
|
|
}
|
|
|
|
void RTM::Task::removeDue()
|
|
{
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setDueDate");
|
|
request->sendRequest();
|
|
}
|
|
|
|
void RTM::Task::setEstimate(const QString& estimate) {
|
|
if (d->estimate == estimate)
|
|
return;
|
|
d->estimate = estimate;
|
|
|
|
qDebug() << "Setting Estimate to: " << estimate;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setEstimate");
|
|
request->addArgument("estimate", estimate);
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setLocationId(RTM::LocationId locationid) {
|
|
d->locationId = locationid;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setLocation");
|
|
request->addArgument("location_id", QString::number(locationid));
|
|
}
|
|
void RTM::Task::setName(const QString& name) {
|
|
if (d->name == name)
|
|
return;
|
|
d->name = name;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setName");
|
|
request->addArgument("name", name);
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setPriority(int priority) {
|
|
if (d->priority == priority)
|
|
return;
|
|
d->priority = priority;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setPriority");
|
|
request->addArgument("priority", QString::number(priority));
|
|
request->sendRequest();
|
|
}
|
|
void RTM::Task::setRepeatString(const QString& repeatString) {
|
|
if (d->repeatString == repeatString)
|
|
return;
|
|
d->repeatString = repeatString;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setRecurrence");
|
|
request->addArgument("repeat", repeatString);
|
|
}
|
|
void RTM::Task::setUrl(const QString& url) {
|
|
if (d->url == url)
|
|
return;
|
|
d->url = url;
|
|
|
|
RTM::Request *request = d->standardRequest("rtm.tasks.setUrl");
|
|
request->addArgument("url", url);
|
|
}
|
|
|
|
void RTM::Task::undoLastAction() {
|
|
//TODO: Implement
|
|
}
|
|
|
|
RTM::Task* RTM::Task::uninitializedTask(RTM::Session* session) {
|
|
return new Task(session);
|
|
}
|
|
|
|
#include "moc_task.cpp"
|