Timer can now tell where it was loaded from
[kitchenalert] / src / timer.cpp
index 8fac364..8174177 100644 (file)
@@ -1,9 +1,11 @@
 /**************************************************************************
-        KitchenAlert v.0.01
+        KitchenAlert
 
-        Copyright (C) 2010  Heli Hyvättinen
+        Copyright (C) 2010-2011  Heli Hyvättinen
 
-        This program is free software: you can redistribute it and/or modify
+        This file is part of KitchenAlert.
+
+        Kitchen Alert 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 3 of the License, or
         (at your option) any later version.
@@ -25,6 +27,8 @@
 #include "timer.h"
 #include "currentalertstablemodel.h"
 #include <qdebug.h>
+#include <QFile>
+#include <QXmlStreamWriter>
 
 Timer::Timer(QObject *parent) :
     QObject(parent)
@@ -66,15 +70,17 @@ void Timer::setAlertText(QString text)
 void Timer::secondPassed()
 {
     _remainingTime--;
-    emit remainingTimeChanged();
+
 
     if (_remainingTime == 0)
     {
         alerting_ = true;
+        alertSound_.play();
         emit alert(whereAmI());
-        qDebug() << "alerting";
+//        qDebug() << "alerting";
     }
 
+    emit remainingTimeChanged(); //after alerting in case of alert so that status gets updated immediately
 }
 
 void Timer::start()
@@ -82,21 +88,40 @@ void Timer::start()
     _remainingTime = _originalTime;
     _actualTimer.start();
 
+
+
+    if (_originalTime == 0) //a 00:00:00 alert has to  be checked here, since it's already negative when checked for the next time
+    {
+        alerting_  = true;
+        alertSound_.play();
+        emit alert(whereAmI());
+//        qDebug () << "Alerting 00:00:00 from row: " << whereAmI().row();
+    }
+
+    else
+    {
+        alerting_ = false;
+        alertSound_.stop();
+    }
+
 }
 
 
 void Timer::stop()
 {
     _actualTimer.stop();
-    _remainingTime = 0; //Stopped timer shows 00:00:00 (which unfortunately makes it red...)
-
+    _remainingTime = 0; //Stopped timer shows 00:00:00
 
+    alerting_ = false;
+    alertSound_.stop();
 }
 
 void Timer::snooze()
 {
     _remainingTime = 120;
 
+    alerting_ = false;
+    alertSound_.stop();
 }
 
 
@@ -123,3 +148,72 @@ QModelIndex Timer::whereAmI()
 
 }
 
+void Timer::enableDefaultSound()
+{
+alertSound_.setDefaultSound();
+}
+
+void Timer::changeAlertSound(QString filename)
+{
+alertSound_.setSound(filename);
+}
+
+
+
+
+bool Timer::save(QString filename)
+{
+    QFile file(filename);
+
+    if (!file.open(QFile::WriteOnly | QFile::Text))
+    {
+       return false;
+    }
+
+    QXmlStreamWriter xmlWriter(&file);
+    xmlWriter.setAutoFormatting(true);
+    xmlWriter.writeStartDocument();
+    xmlWriter.writeStartElement("kitchenalert");
+    xmlWriter.writeStartElement("timer");
+    xmlWriter.writeAttribute("alert_text",_alertText);
+    xmlWriter.writeAttribute("time_in_seconds", QString().setNum(_originalTime));
+    xmlWriter.writeEndDocument(); //this should close all open elements
+
+    return true;
+}
+
+bool Timer::load(QString filename)
+{
+    QFile file (filename);
+    if (!file.open(QFile::ReadOnly | QFile::Text))
+    {
+        return false;
+    }
+
+    QXmlStreamReader reader;
+    reader.setDevice(&file);
+
+    reader.readNextStartElement();
+
+    if (reader.name() != "kitchenalert")
+        return false;
+
+    reader.readNextStartElement();
+    if (reader.name() != "timer")
+        return false;
+
+
+    _alertText = reader.attributes().value("alert_text").toString();
+    _originalTime = reader.attributes().value("time_in_seconds").toString().toInt();
+
+    filenameWithPath_ = filename;
+
+    return true;
+}
+
+QString Timer::getFilename()
+{
+    return filenameWithPath_;
+}
+
+