Add source code.
This commit is contained in:
1 parent
dab19ace02
commit
0b8a7b3cdc
31 files changed
+2809
No files matched your search
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
#include <ctime>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Prompt: free to accept prompts.
|
||||
// LimitReset: computed - a Wait whose time has passed (can also be set by hand).
|
||||
// The enum order is the sort order of the panels.
|
||||
enum class StatusKind { Prompt, LimitReset, Testing, Wait, Uploading, Frozen, Done };
|
||||
|
||||
struct Status {
|
||||
StatusKind kind = StatusKind::Prompt;
|
||||
std::time_t waitUntil = 0; // only meaningful when kind == Wait
|
||||
};
|
||||
|
||||
namespace StatusUtil {
|
||||
|
||||
Status make(StatusKind kind);
|
||||
|
||||
// User input such as "testing" or "wait 16:30". A wait time that has already
|
||||
// passed today is taken to mean tomorrow.
|
||||
std::optional<Status> parse(const std::string& text, std::time_t now);
|
||||
|
||||
// Database representation, e.g. "testing" or "wait 2026-10-17T16:30".
|
||||
std::string serialize(const Status& status);
|
||||
std::optional<Status> deserialize(const std::string& text);
|
||||
|
||||
// The status shown to the user: an expired wait becomes LimitReset.
|
||||
Status effective(const Status& status, std::time_t now);
|
||||
|
||||
std::string label(const Status& status); // "Prompt", "Limit reset", "Wait 16:30", ...
|
||||
std::string kindName(StatusKind kind); // lowercase token: "prompt", "limit-reset", ...
|
||||
std::vector<StatusKind> allKinds();
|
||||
// Accepts "limit-reset", "limit_reset", "limitreset", "reset"; "available" is an
|
||||
// old name for "prompt".
|
||||
std::optional<StatusKind> kindFromName(const std::string& name);
|
||||
int rank(StatusKind kind); // sort order
|
||||
bool isBusy(StatusKind kind); // does this status hold the account?
|
||||
|
||||
} // namespace StatusUtil
|
||||
Reference in new issue
Block a user