Beispiel #1
0
void
ZeoDownload::downloadFinished(QNetworkReply *reply)
{
    if (dates.empty()) {
        // We have to build a list of dates
        QString response = reply->readAll();
        //qDebug() << "response " << response;

        QScriptValue sc;
        QScriptEngine se;

        sc = se.evaluate("("+response+")").property("response").property("dateList").property("date");
        int length = sc.property("length").toInteger();

        dates.clear();
        for (int i=0;i<length;i++) {
            QString day = sc.property(i).property("day").toString();
            QString month = sc.property(i).property("month").toString();
            QString year = sc.property(i).property("year").toString();

            dates.append(QDate(year.toInt(), month.toInt(), day.toInt()));
        }
        allMeasures = dates.count();
    } else {
        // We have to read data for the date
        QString response = reply->readAll();
        //qDebug() << "response2 " << response;

        QScriptValue sc;
        QScriptEngine se;

        sc = se.evaluate("("+response+")").property("response").property("sleepStats");
        QString zq = sc.property("zq").toString();

        int deep = sc.property("timeInDeep").toInteger();
        int light = sc.property("timeInLight").toInteger();
        int rem = sc.property("timeInRem").toInteger();
        int time = deep + light + rem;

        if (dates.first() > QDate().addMonths(-1)) {
            //qDebug() << dates.first() << zq;

            SummaryMetrics add;
            add.setDateTime(QDateTime(dates.first(), QTime(0,0,0)));
            add.setText("Sleep index (ZQ)", QString("%1").arg(zq));
            add.setText("Sleep time", QString("%1").arg(time));
            context->athlete->metricDB->importMeasure(&add);
        }

        dates.removeFirst();
    }

    if (!nextDate()) {
        QString status = QString(tr("%1 new on %2 measurements received.")).arg(newMeasures).arg(allMeasures);
        QMessageBox::information(context->mainWindow, tr("Zeo Data Download"), status);
    }
    return;
}
Beispiel #2
0
vle::devs::Time KnowledgeBase::duration(const vle::devs::Time& time)
{
    vle::devs::Time next = nextDate(time);

    if (next == vle::devs::Time::negativeInfinity) {
        return 0.0;
    } else {
        assert(next >= time);
        return next - time;
    }
}
Beispiel #3
0
bool
ZeoDownload::nextDate()
{
    if (!dates.empty()) {
        bool present = false;
        QDate date = dates.first();
        QString dateStr = date.toString("yyyy-MM-dd");

        QDateTime dateTime = QDateTime(date, QTime(0,0,0));
        QList<SummaryMetrics> list = context->athlete->metricDB->getAllMeasuresFor(dateTime,dateTime);
        for (int i=0;i<list.size();i++) {
            SummaryMetrics sm = list.at(i);
            if (sm.getText("Sleep time", "").length()>0 && sm.getText("Sleep index (ZQ)", "").length()>0) {
                present = true;
                dates.removeFirst();
                return nextDate();
            }
        }

        if (!present) {
            newMeasures ++;
            // Build the URL to retrieve the stats for date
            QString url = appsettings->cvalue(context->athlete->cyclist, GC_ZEOURL, "http://app-pro.myzeo.com:8080").toString() + base_api_url + "getSleepStatsForDate" + "?key=" + api_key + "&date=" + dateStr;
            QNetworkRequest request = QNetworkRequest(QUrl(url));
            request.setRawHeader("Authorization", "Basic " + usernameAndPasswordEncoded.toLatin1());
            request.setRawHeader("Referer" , "http://www.goldencheetah.org");
            request.setRawHeader("Accept" , "application/json");

            QNetworkReply *reply = nam->get(request);

            if (reply->error() != QNetworkReply::NoError) {
                QMessageBox::warning(context->mainWindow, tr("Zeo Data Download"), reply->errorString());
            } else
                return true;
        }
    }

    return false;
}
void EditDialog::save()
{
    connection->profile.name = ui->nameEdit->text();
    connection->profile.serverAddress = ui->serverAddrEdit->text();
    connection->profile.serverPort = ui->serverPortEdit->text().toUShort();
    connection->profile.localAddress = ui->localAddrEdit->text();
    connection->profile.localPort = ui->localPortEdit->text().toUShort();
    connection->profile.password = ui->pwdEdit->text();
    connection->profile.method = ui->encryptComboBox->currentText();
    connection->profile.timeout = ui->timeoutSpinBox->value();
    connection->profile.autoStart = ui->autoStartCheckBox->isChecked();
    connection->profile.debug = ui->debugCheckBox->isChecked();

    int day = ui->resetDateSpinBox->value();
    QDate currentDate = QDate::currentDate();
    QDate nextDate(currentDate.year(), currentDate.month(), day);
    if (nextDate < currentDate) {
        nextDate = nextDate.addMonths(1);
    }
    connection->profile.nextResetDate = nextDate;

    this->accept();
}
Beispiel #5
0
int main( int argc, const char* argv[] )
{
    //Instancier un kiwi::solver
    kiwi::Solver solver;

    //Créer une kiwi::variable pour chaque variable du système
    kiwi::Variable min("min");
    kiwi::Variable max("max");
    kiwi::Variable prevDate("prevDate");
    kiwi::Variable nextDate("nextDate");

    // - On assigne à ces variable une valeure initiale
    min.setValue(5);
    max.setValue(15);
    prevDate.setValue(0);
    nextDate.setValue(10);

    //Créer et ajouter des kiwi::constraint portant sur ces variables avec pour chacune une kiwi::strength associée
    // - Ici les premières contraintes que l'on pose correspondent à notre "modèle",
    //   ce sont des contraintes requises qui définisse la consistance du système
    kiwi::Constraint cstrMinSuppZero(min >= 0, kiwi::strength::required);
    solver.addConstraint(cstrMinSuppZero);

    kiwi::Constraint cstrNextDateMin(nextDate >= min + prevDate, kiwi::strength::required);
    solver.addConstraint(cstrNextDateMin);

    kiwi::Constraint cstrNextDateMax(nextDate <= max + prevDate, kiwi::strength::required);
    solver.addConstraint(cstrNextDateMax);

    // - On appelle "stay" les contraintes qui indiquent aux variables de "ne pas bouger",
    //   on les initialise en général au début du mouvement et on règle leur poid en fonction du comportement voulu.
    //   ici par exemple, on préfère que les dates bougent plutôt que les durées des contraintes (sauf default qui n'est pas représenté ici)
    kiwi::Constraint stayMin(min == min.value(), kiwi::strength::strong);
    solver.addConstraint(stayMin);

    kiwi::Constraint stayMax(max == max.value(), kiwi::strength::strong);
    solver.addConstraint(stayMax);

    kiwi::Constraint stayPrevDate(prevDate == prevDate.value(), kiwi::strength::weak);
    solver.addConstraint(stayPrevDate);

    kiwi::Constraint stayNextDate(nextDate == nextDate.value(), kiwi::strength::weak);
    solver.addConstraint(stayNextDate);

    //Annoncer les variables dont on veux proposer des nouvelles valeures grace à kiwi::solver::addEditVariable() en leur associant une kiwi::strength différente de required
    // - ici, on veut déplacer le timenode next
    // Note: on ne peut pas ici mettre de force required à une édit variable car si l'utilisateur faisait un déplacement impossible, cela ferait crasher le système
    solver.addEditVariable(nextDate, kiwi::strength::medium);

    //Proposer des nouvelles valeures pour les "variables d'édition" avec kiwi::solver::suggestValue()
    solver.suggestValue(nextDate, 20);

    //Résoudre le système** grâce à kiwi::solver::updateVariables()
    solver.updateVariables();
    // - affichons le resultat
    std::cout << "prevDate(" << prevDate.value() << ") -------- prevDate+min(" << prevDate.value() + min.value() << ") ------- nextDate(" << nextDate.value() << ") -------- prevDate+max(" << prevDate.value() + max.value() << ")\n";

    //"Relacher" les "variables d'édition" avec kiwi::solver::removeEditVariable()
    solver.removeEditVariable(nextDate);

    return 0;
}