/
DemienMedich
/
BodyweightBase
Обзор
Документация
Войти
/
DemienMedich
/
BodyweightBase
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/session_controller.h
245 строк
12 KB
DemienMedich
Expose weight chart data property
24 июн 2026, 00:14
24 июн 2026, 00:14
00c09bb
Код
Авторство
О чём код?
#pragma once #include <memory> #include <optional> #include <QDateTime> #include <QJsonArray> #include <QJsonObject> #include <QObject> #include <QVariantList> #include <QVariantMap> #include "bodyweight/state_importer.h" #include "bodyweight/state_store.h" #include "bodyweight/workout_session_runner.h" class SessionController : public QObject { Q_OBJECT Q_PROPERTY(bool ready READ ready NOTIFY changed) Q_PROPERTY(bool active READ active NOTIFY changed) Q_PROPERTY(bool paused READ paused NOTIFY changed) Q_PROPERTY(bool needsSave READ needsSave NOTIFY changed) Q_PROPERTY(bool hasRecoverableDraft READ hasRecoverableDraft NOTIFY changed) Q_PROPERTY(QString status READ status NOTIFY changed) Q_PROPERTY(QString pendingResultSummary READ pendingResultSummary NOTIFY changed) Q_PROPERTY(QString recoverableDraftSummary READ recoverableDraftSummary NOTIFY changed) Q_PROPERTY(QString planName READ planName NOTIFY changed) Q_PROPERTY(QString planGoal READ planGoal NOTIFY changed) Q_PROPERTY(QVariantList profiles READ profiles NOTIFY changed) Q_PROPERTY(QString selectedProfileId READ selectedProfileId NOTIFY changed) Q_PROPERTY(QString selectedProfileName READ selectedProfileName NOTIFY changed) Q_PROPERTY(QVariantMap preWorkoutRecommendation READ preWorkoutRecommendation NOTIFY changed) Q_PROPERTY(QString phaseTitle READ phaseTitle NOTIFY changed) Q_PROPERTY(QString exerciseName READ exerciseName NOTIFY changed) Q_PROPERTY(QString nextExerciseName READ nextExerciseName NOTIFY changed) Q_PROPERTY(QString currentCoachNote READ currentCoachNote NOTIFY changed) Q_PROPERTY(QString currentStepSummary READ currentStepSummary NOTIFY changed) Q_PROPERTY(QVariantMap currentExerciseTechnique READ currentExerciseTechnique NOTIFY changed) Q_PROPERTY(QString progressText READ progressText NOTIFY changed) Q_PROPERTY(QString completedStepText READ completedStepText NOTIFY changed) Q_PROPERTY(QString counterText READ counterText NOTIFY changed) Q_PROPERTY(double phaseProgress READ phaseProgress NOTIFY changed) Q_PROPERTY(QString phaseProgressText READ phaseProgressText NOTIFY changed) Q_PROPERTY(QString phaseColor READ phaseColor NOTIFY changed) Q_PROPERTY(int currentStepIndex READ currentStepIndex NOTIFY changed) Q_PROPERTY(QVariantList currentExerciseFrameUrls READ currentExerciseFrameUrls NOTIFY changed) Q_PROPERTY(QString currentLoadNote READ currentLoadNote WRITE setCurrentLoadNote NOTIFY changed) Q_PROPERTY(QVariantList plans READ plans NOTIFY changed) Q_PROPERTY(QString selectedPlanId READ selectedPlanId NOTIFY changed) Q_PROPERTY(QVariantList selectedPlanSteps READ selectedPlanSteps NOTIFY changed) Q_PROPERTY(int totalSessions READ totalSessions NOTIFY changed) Q_PROPERTY(int totalWorkMinutes READ totalWorkMinutes NOTIFY changed) Q_PROPERTY(QString completionRateText READ completionRateText NOTIFY changed) Q_PROPERTY(QVariantList recentSessions READ recentSessions NOTIFY changed) Q_PROPERTY(QVariantList latestSessionSteps READ latestSessionSteps NOTIFY changed) Q_PROPERTY(QString progressPlanFilter READ progressPlanFilter WRITE setProgressPlanFilter NOTIFY changed) Q_PROPERTY(QVariantList progressDayBuckets READ progressDayBuckets NOTIFY changed) Q_PROPERTY(QVariantList progressExerciseBuckets READ progressExerciseBuckets NOTIFY changed) Q_PROPERTY(QVariantList exerciseLibrary READ exerciseLibrary NOTIFY changed) Q_PROPERTY(QString exerciseSearch READ exerciseSearch WRITE setExerciseSearch NOTIFY changed) Q_PROPERTY(QString exerciseMetricFilter READ exerciseMetricFilter WRITE setExerciseMetricFilter NOTIFY changed) Q_PROPERTY(QVariantMap nutritionSummary READ nutritionSummary NOTIFY changed) Q_PROPERTY(QVariantList nutritionMeals READ nutritionMeals NOTIFY changed) Q_PROPERTY(QVariantList nutritionWeightEntries READ nutritionWeightEntries NOTIFY changed) Q_PROPERTY(QVariantList weightChartData READ weightChartData NOTIFY changed) Q_PROPERTY(QVariantList nutritionMeasurementEntries READ nutritionMeasurementEntries NOTIFY changed) Q_PROPERTY(QVariantList nutritionAdherenceDays READ nutritionAdherenceDays NOTIFY changed) Q_PROPERTY(QVariantList nutritionPhotoEntries READ nutritionPhotoEntries NOTIFY changed) Q_PROPERTY(QVariantList recoveryCheckIns READ recoveryCheckIns NOTIFY changed) Q_PROPERTY(QVariantList completedStepsForCurrentExercise READ completedStepsForCurrentExercise NOTIFY changed) Q_PROPERTY(QVariantList workoutCalendar READ workoutCalendar NOTIFY changed) Q_PROPERTY(QVariantMap weeklySummary READ weeklySummary NOTIFY changed) Q_PROPERTY(QVariantList undertrainedExercises READ undertrainedExercises NOTIFY changed) Q_PROPERTY(QString recommendedRestText READ recommendedRestText NOTIFY changed) Q_PROPERTY(bool soundsEnabled READ soundsEnabled WRITE setSoundsEnabled NOTIFY changed) Q_PROPERTY(double uiScale READ uiScale WRITE setUiScale NOTIFY changed) Q_PROPERTY(bool darkMode READ darkMode WRITE setDarkMode NOTIFY changed) Q_PROPERTY(QVariantMap applicationInfo READ applicationInfo CONSTANT) public: explicit SessionController(QObject *parent = nullptr); SessionController( QString storageDirectory, QString exerciseCatalogPath, QString legacyStatePath = {}, QString exerciseFrameDirectory = {}, QObject *parent = nullptr); bool ready() const; bool active() const; bool paused() const; bool needsSave() const; bool hasRecoverableDraft() const; QString status() const; QString pendingResultSummary() const; QString recoverableDraftSummary() const; QString planName() const; QString planGoal() const; QVariantList profiles() const; QString selectedProfileId() const; QString selectedProfileName() const; QVariantMap preWorkoutRecommendation() const; QString phaseTitle() const; QString exerciseName() const; QString nextExerciseName() const; QString currentCoachNote() const; QString currentStepSummary() const; QVariantMap currentExerciseTechnique() const; QString progressText() const; QString completedStepText() const; QString counterText() const; double phaseProgress() const; QString phaseProgressText() const; QString phaseColor() const; int currentStepIndex() const; QVariantList currentExerciseFrameUrls() const; QString currentLoadNote() const; QVariantList plans() const; QString selectedPlanId() const; QVariantList selectedPlanSteps() const; int totalSessions() const; int totalWorkMinutes() const; QString completionRateText() const; QVariantList recentSessions() const; QVariantList latestSessionSteps() const; QString progressPlanFilter() const; QVariantList progressDayBuckets() const; QVariantList progressExerciseBuckets() const; QVariantList exerciseLibrary() const; QString exerciseSearch() const; QString exerciseMetricFilter() const; QVariantMap nutritionSummary() const; QVariantList nutritionMeals() const; QVariantList nutritionWeightEntries() const; QVariantList weightChartData() const; QVariantList nutritionMeasurementEntries() const; QVariantList nutritionAdherenceDays() const; QVariantList nutritionPhotoEntries() const; QVariantList recoveryCheckIns() const; QVariantList completedStepsForCurrentExercise() const; QVariantList workoutCalendar() const; QVariantMap weeklySummary() const; QVariantList undertrainedExercises() const; QString recommendedRestText() const; bool soundsEnabled() const; void setSoundsEnabled(bool enabled); double uiScale() const; void setUiScale(double scale); bool darkMode() const; void setDarkMode(bool dark); QVariantMap applicationInfo() const; void setExerciseSearch(const QString &value); void setExerciseMetricFilter(const QString &value); void setProgressPlanFilter(const QString &value); void setCurrentLoadNote(const QString &value); Q_INVOKABLE void start(); Q_INVOKABLE void advanceOneSecond(); Q_INVOKABLE void skipCountdown(); Q_INVOKABLE void completeCurrent(); Q_INVOKABLE void skipCurrentExercise(); Q_INVOKABLE void addRep(); Q_INVOKABLE void removeRep(); Q_INVOKABLE void togglePause(); Q_INVOKABLE void saveFinishedSession(const QString &feedbackLabel, bool applyAdaptation = false); Q_INVOKABLE QVariantMap pendingResultDetails() const; Q_INVOKABLE QString adaptationPreview(const QString &feedbackLabel) const; Q_INVOKABLE void discardFinishedSession(); Q_INVOKABLE void abortActiveWorkout(); Q_INVOKABLE void restoreDraft(); Q_INVOKABLE void discardDraft(); Q_INVOKABLE void selectProfile(const QString &profileId); Q_INVOKABLE void createProfile(const QString &name); Q_INVOKABLE void selectPlan(const QString &planId); Q_INVOKABLE void duplicateSelectedPlan(const QString &name); Q_INVOKABLE void deleteSelectedPlan(); Q_INVOKABLE void renameSelectedPlan(const QString &name, const QString &goal); Q_INVOKABLE void updateSelectedPlanStep( int stepIndex, const QString &exerciseId, const QString &targetText, const QString &restSecondsText, const QString &coachNote); Q_INVOKABLE void appendSelectedPlanStep(const QString &exerciseId, const QString &coachNote); Q_INVOKABLE void duplicateSelectedPlanStep(int stepIndex); Q_INVOKABLE void removeSelectedPlanStep(int stepIndex); Q_INVOKABLE void moveSelectedPlanStep(int stepIndex, int delta); Q_INVOKABLE void undoLastPlanEdit(); Q_INVOKABLE bool canUndo() const; Q_INVOKABLE QString lastSessionPlanId() const; Q_INVOKABLE void repeatLastSession(); Q_INVOKABLE void playBeep(int frequencyHz, int durationMs); Q_INVOKABLE void logBodyWeight(const QString &weightText); Q_INVOKABLE void logBodyMeasurements( const QString &waistText, const QString &shouldersText, const QString &chestText, const QString &armText); Q_INVOKABLE void selectNutritionPreset(const QString &presetId); Q_INVOKABLE void markNutritionAdherence(const QString &statusId); Q_INVOKABLE void logPhotoProgress(const QString &imagePath); Q_INVOKABLE void logRecoveryCheckIn(int energyScore, int sleepScore, int jointScore, const QString ¬e); Q_INVOKABLE void exportLocalData(const QString &destinationPath); Q_INVOKABLE void exportCsv(const QString &destinationPath); Q_INVOKABLE void exportSelectedPlan(const QString &destinationPath); Q_INVOKABLE void importPlan(const QString &sourcePath); Q_INVOKABLE void clearPersonalData(); signals: void changed(); private: const bodyweight::WorkoutPlan *selectedPlan() const; QString exerciseNameForStep(int index) const; QVariantList exerciseFrameUrls(const QString &exerciseId) const; bodyweight::SessionSnapshot snapshot() const; QJsonArray sessionsArray() const; void captureFinishedSession(); void persistDraft(); void notify(); bodyweight::StateSnapshot state_; QVector<bodyweight::ExerciseDefinition> exercises_; std::unique_ptr<bodyweight::WorkoutSessionRunner> runner_; std::unique_ptr<bodyweight::StateStore> store_; QJsonObject root_; std::optional<bodyweight::FinishedSession> pendingFinishedSession_; std::optional<bodyweight::StoredSessionDraft> recoverableDraft_; QDateTime sessionStartedAtLocal_; QDateTime sessionEndedAtLocal_; int secondsSinceDraftSave_ = 0; QString exerciseSearch_; QString exerciseMetricFilter_ = QStringLiteral("all"); QString progressPlanFilter_ = QStringLiteral("all"); QString currentLoadNote_; QString storageDirectory_; QString exerciseFrameDirectory_; QString status_; bool soundsEnabled_ = true; double uiScale_ = 1.0; bool darkMode_ = true; QJsonArray planUndoStack_; static constexpr int maxPlanUndoSteps = 20; };