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; }
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; } }
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(); }
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; }