working on todo.md features
This commit is contained in:
1 parent
210d124814
commit
8f54841c2c
110 files changed
+15932
-6576
No files matched your search
+56
-4
@@ -65,6 +65,20 @@ struct LayoutState {
|
||||
|
||||
/// The measurements pane, by signal *name* and with the type and options a row was built with.
|
||||
std::vector<Measure> measures;
|
||||
|
||||
/// Free text the user attached to this configuration: what it is for, what to look at first.
|
||||
/// A configuration is a *named* session, and the name alone rarely says what makes it different
|
||||
/// from its neighbour.
|
||||
std::string comment;
|
||||
|
||||
/// The startup settings the configuration carries, applied when the chooser opens it -- which is
|
||||
/// why they live here and not only on the command line: two sources on one machine want different
|
||||
/// buffers and different clocks, and retyping the flags to look at the second one is how a
|
||||
/// setting gets forgotten. A zero `buffer_mb` and an empty `capture_packets` mean "not stored":
|
||||
/// the command line's value stands, so an old file cannot silently shrink a buffer.
|
||||
double buffer_mb = 0.0;
|
||||
bool relative_time = false;
|
||||
std::uint32_t capture_packets = 0;
|
||||
};
|
||||
|
||||
/// A data source udpscope has a stored session for: one row of the startup chooser.
|
||||
@@ -76,13 +90,23 @@ struct KnownSource {
|
||||
int rows = 0; ///< plots the session had
|
||||
int signals = 0; ///< named slots across those plots
|
||||
std::int64_t mtime = 0; ///< orders the list; never shown
|
||||
/// Which *configuration* of that source this row is. A source may have several, each a named
|
||||
/// session of its own, so the pair (host, port, config) is what identifies a row.
|
||||
std::string config;
|
||||
std::string comment; ///< the configuration's note, shown beside its name
|
||||
/// The startup settings this configuration carries, so the chooser can apply them.
|
||||
double buffer_mb = 0.0;
|
||||
bool relative_time = false;
|
||||
std::uint32_t capture_packets = 0;
|
||||
};
|
||||
|
||||
/// Every session file that names at least one signal, newest first.
|
||||
/// Every configuration that names at least one signal *or* carries a setting, newest first.
|
||||
///
|
||||
/// The filter is what makes the list usable: a development machine accumulates one session file
|
||||
/// per probe run on a throwaway port -- 140 of them when this was written -- and every one holds
|
||||
/// `signals = ["", "", "", ""]`. A listed source is one somebody actually configured.
|
||||
/// `signals = ["", "", "", ""]`. A listed source is one somebody actually configured — and a
|
||||
/// buffer size, a note or a clock counts as configuring it, because that is how the chooser's form
|
||||
/// sets a host up before it has ever streamed.
|
||||
std::vector<KnownSource> known_sources();
|
||||
|
||||
/// Deletes one source's session file; the chooser's `x`. False means the file was already gone or
|
||||
@@ -98,11 +122,39 @@ bool math_node_from_text(const std::string& text, MathNode& out);
|
||||
/// The directory session files live in: $XDG_CONFIG_HOME/udpscope, else
|
||||
/// ~/.config/udpscope, else /tmp/udpscope-config. Not created by this call.
|
||||
std::string config_dir();
|
||||
/// `$XDG_CACHE_HOME/udpscope`, or `~/.cache/udpscope`: where bulky, disposable state
|
||||
/// lives (the packet captures; item 9's event cache). Created on demand by callers.
|
||||
std::string cache_dir();
|
||||
|
||||
/// `~/.config/udpscope/<host>_<port>.toml`, with the directory created.
|
||||
/// Characters unsafe in a filename are replaced in the host part.
|
||||
/// The *legacy* single-file path, `~/.config/udpscope/<host>_<port>.toml`, with the directory
|
||||
/// created. Still the import source for a file written before configurations existed; nothing
|
||||
/// writes here any more.
|
||||
std::string layout_path(const std::string& host, std::uint16_t port);
|
||||
|
||||
/// The per-source directory a source's configurations live in:
|
||||
/// `~/.config/udpscope/<host>_<port>/`. Not created by this call.
|
||||
std::string config_dir_for(const std::string& host, std::uint16_t port);
|
||||
|
||||
/// One configuration's file, `<config_dir_for(host, port)>/<name>.toml`, with the directory
|
||||
/// created. The name is sanitized the way the host is, so a name the user typed with a slash in it
|
||||
/// cannot escape the directory.
|
||||
std::string configuration_path(const std::string& host, std::uint16_t port,
|
||||
const std::string& name);
|
||||
|
||||
/// The source's configurations, newest first. A legacy single-file session appears here as the
|
||||
/// configuration named `default`, and importing it is the first thing this does.
|
||||
std::vector<std::string> configuration_names(const std::string& host, std::uint16_t port);
|
||||
|
||||
/// The configuration the source was last left in: `<dir>/active`, or the newest that exists when
|
||||
/// nothing wrote one. Never empty for a source that has any configuration at all.
|
||||
std::string active_configuration(const std::string& host, std::uint16_t port);
|
||||
|
||||
/// Remembers which configuration this source is on. Called by every save.
|
||||
bool set_active_configuration(const std::string& host, std::uint16_t port, const std::string& name);
|
||||
|
||||
/// Deletes one configuration's file, and `active` if it named it.
|
||||
bool forget_configuration(const std::string& host, std::uint16_t port, const std::string& name);
|
||||
|
||||
/// Parses the file's TOML subset. Returns false when the file is missing or
|
||||
/// malformed; `out` is left usable either way (a malformed file loads as much as
|
||||
/// parsed, which beats refusing a hand-edited file over one stray character).
|
||||
|
||||
Reference in new issue
Block a user