/
DemienMedich
/
BodyweightBase
Обзор
Документация
Войти
/
DemienMedich
/
BodyweightBase
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
tools/state_probe.cpp
67 строк
2 KB
DemienMedich
Replace C# app with C++ Qt version
20 июн 2026, 00:04
20 июн 2026, 00:04
e516ad2
Код
Авторство
О чём код?
#include "bodyweight/state_importer.h" #include "bodyweight/exercise_catalog.h" #include "bodyweight/workout_session_runner.h" #include <algorithm> #include <QCoreApplication> #include <QTextStream> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QTextStream output(stdout); QTextStream error(stderr); if (app.arguments().size() < 2 || app.arguments().size() > 3) { error << "Usage: BodyweightStateProbe <state.json> [exercises.json]\n"; return 2; } const bodyweight::ImportResult result = bodyweight::importStateFile(app.arguments().at(1)); if (!result.ok) { error << result.error << '\n'; return 1; } output << "LibraryVersion: " << result.state.libraryVersion << '\n' << "Plans: " << result.state.workoutPlans.size() << '\n' << "SelectedPlanId: " << result.state.selectedPlanId << '\n' << "Sessions: " << result.state.sessionCount << '\n' << "PendingDraft: " << (result.state.hasPendingSessionDraft ? "yes" : "no") << '\n' << "Warnings: " << result.warnings.size() << '\n'; for (const QString &warning : result.warnings) { output << " - " << warning << '\n'; } if (app.arguments().size() == 3) { const bodyweight::ExerciseCatalogResult catalog = bodyweight::importExerciseCatalogFile(app.arguments().at(2)); if (!catalog.ok) { error << catalog.error << '\n'; return 1; } auto selectedPlan = std::find_if( result.state.workoutPlans.cbegin(), result.state.workoutPlans.cend(), [&result](const bodyweight::WorkoutPlan &plan) { return plan.id.compare(result.state.selectedPlanId, Qt::CaseInsensitive) == 0; }); if (selectedPlan == result.state.workoutPlans.cend()) { error << "Selected plan was not found.\n"; return 1; } bodyweight::WorkoutSessionRunner runner(catalog.exercises); QString startError; const bool runnable = runner.start(*selectedPlan, &startError); output << "CatalogExercises: " << catalog.exercises.size() << '\n' << "SelectedPlanRunnable: " << (runnable ? "yes" : "no") << '\n'; if (!runnable) { error << startError << '\n'; return 1; } } return 0; }