Files
adhd/service.h
T

83 lines
1.9 KiB
C++

#ifndef SERVICE_H
#define SERVICE_H
#include <QList>
#include <QObject>
#include <QDateTime>
#include <QString>
#include <QFileInfo>
#include <optional>
struct Session
{
enum Result {
UNSPECIFIED = 0,
WIN,
LOSS,
NEUTRAL
};
// Becomes the file name
QString id;
// Stored in the frontmatter under 'Oneliner' key
QString oneliner;
// Stored in the frontmatter
int durationMs;
// After the --- onwards, serves as general scratchpad
QString content;
// Stored in the frontmatter under 'Result' key
Result result;
QDateTime lastModifiedAt;
QDateTime createdAt;
bool isComplete() const;
};
class Service : public QObject {
Q_OBJECT
public:
explicit Service(QObject *parent = nullptr);
~Service();
QList<Session> sessions() const;
QString vaultDirectory() const;
int sessionCount() const;
int completedSessionCount() const;
int totalWins() const;
int totalLosses() const;
int totalNeutrals() const;
public slots:
/// @brief sets the directory from which to read/write sessions
/// Fails silently if not a valid path
/// Loads sessions from this path
void setVaultDirectory(const QString &path);
/// @brief creates the session and stores in sessions list
/// @returns the newly created session
Session createSession(const QString &oneliner, const QString &content);
/// @brief updates the session
/// Updates session in the sessions list, and the file associated
void updateSession(const Session &session);
void deleteSession(const QString &sessionId);
signals:
void sessionsChanged();
private:
QString m_vaultDirectory;
QList<Session> m_sessions;
/// @returns null Session if not a valid session markdown document
std::optional<Session> parseFile(const QFileInfo &fileInfo);
Session::Result parseResult(const QString &resultStr);
void overwriteSessionFile(const Session &session);
};
#endif //SERVICE_H