Files
roro9stack/lib/storage_model/src/cleanup_plan.h
T
twislaandClaude Opus 5.5 d7952612dd M2 step 6: Tracks, recorded to GPX in the background
`r` in the GNSS App (or `gnss track start|stop`) records a Track to
/gnss/tracks/YYYYMMDD-HHMMSS.gpx: a point every 5 s once moved 5 m
(lib/gnss/track, 7 tests: haversine, the rule, GPX text, the file name).
It keeps recording with the App closed, shows REC in the Status Bar, and
announces start and stop with a Toast. It needs a card and the time;
switching GNSS off stops it. Tracks are written like Captures: past 90 %
card usage, until full. Storage Clean-up gets a GNSS tracks category.

A Track cut short by a reset or power loss has no GPX footer; the GNSS
Service closes such files at the next boot.

Verified on the device: a recorded Track and one interrupted by a reset
both parse as GPX 1.1 on the PC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
2026-10-04 22:46:57 +02:00

42 lines
1.2 KiB
C++

#pragma once
#include <cstdint>
#include <string>
#include <vector>
namespace roro {
struct StoredFile {
std::string path;
uint64_t bytes;
};
// What Storage Clean-up offers (see CONTEXT.md). Notes are deliberately absent.
struct CleanupCategory {
const char* label;
const char* folder;
};
inline const CleanupCategory kCleanupCategories[] = {
{"IRC logs", "/irc"},
{"Wi-Fi scan logs", "/wifi/scans"},
{"Wi-Fi captures", "/captures/wifi"},
{"GNSS tracks", "/gnss/tracks"},
};
enum class CleanupAge { OneMonth, ThreeMonths, SixMonths, OneYear, Everything };
inline const char* const kCleanupAgeLabels[] = {"Older than 1 month", "Older than 3 months", "Older than 6 months",
"Older than 1 year", "Everything"};
// The files a clean-up would delete, and how much space that frees. Dates come from file names;
// undated files are only removed by Everything.
struct CleanupPlan {
std::vector<std::string> paths;
uint64_t bytes = 0;
static CleanupPlan make(const std::vector<StoredFile>& files, CleanupAge age, int todayDay);
};
std::string formatBytes(uint64_t bytes);
} // namespace roro