cli: Met en place Doxygen

This commit is contained in:
2022-10-15 11:06:42 +02:00
parent 8934203d73
commit e13914bfa5
11 changed files with 2777 additions and 5 deletions

1
.gitignore vendored
View File

@@ -8,6 +8,7 @@
# Compilation
build
doc
# Executables
oki

2658
cli/Doxyfile Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -42,10 +42,17 @@ $(BUILD_DIR)/%.o: src/%.cpp | $(BUILD_DIR)
$(BUILD_DIR):
mkdir -p $(subst src,$(BUILD_DIR),$(SRC_DIR))
# Génère la documentation avec Doxygen
doc/html/index.html: Doxyfile $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.h))
doxygen
# Supprime tous les fichiers issus de la compilation
.PHONY: clean
clean:
rm -rf $(BUILD_DIR) $(TARGET_EXE)
rm -rf $(BUILD_DIR) $(TARGET_EXE) doc
doc: doc/html/index.html
.PHONY: all clean doc
# Inclut les Makefiles de chaque fichier source
# Le - permet d'ignorer les Makefiles manquants

View File

@@ -4,16 +4,31 @@
#include <variant>
namespace oki{
/**
* Liste tous les paquets disponibles.
*/
struct ListAction {
};
/**
* Demande l'installation d'un paquet nommé.
*/
struct InstallAction {
std::string_view packageName;
explicit InstallAction(const char *packageName) : packageName{packageName} {}
};
/**
* Affiche les informations d'un paquet d'après son nom.
*/
struct ShowAction {
std::string_view packageName;
explicit ShowAction(const char *packageName) : packageName{packageName} {}
};
/**
* Toutes les actions possibles.
*/
using CliAction = std::variant<ListAction, InstallAction, ShowAction>;
CliAction parseArguments(int argc, char *argv[]);

View File

@@ -3,6 +3,17 @@
#include <filesystem>
namespace oki{
/**
* Détermine le chemin par défaut vers le répertoire local de l'utilisateur.
*
* @return Le chemin à utiliser.
*/
std::filesystem::path getDefaultLocalRepository();
/**
* Détermine si STDOUT supporte la couleur.
*
* @return Si STDOUT est un terminal.
*/
bool acceptColor();
}

View File

@@ -3,11 +3,25 @@
#include <filesystem>
namespace oki{
/**
* Un extracteur d'archives compressées au format ZIP.
*/
class Extractor {
private:
std::filesystem::path destination;
public:
/**
* Créé un nouvel extracteur.
*
* @param destination Chemin vers le dossier où extraire les fichiers.
*/
explicit Extractor(std::filesystem::path destination);
/**
* Extraire tous les fichiers à partir de l'archive dont le chemin est spécifié.
*
* @param archivePath Le chemin vers l'archive à décompresser.
*/
void extract(const std::filesystem::path &archivePath);
};
}

View File

@@ -4,17 +4,44 @@
#include <string>
namespace oki{
/**
* Une requête HTTP, préparée par CURL.
*/
class HttpRequest {
private:
void *curl;
std::string url;
public:
/**
* Instancie une nouvelle requête vers une url.
*
* @param url L'url à utiliser.
*/
explicit HttpRequest(std::string_view url);
/**
* Exécute la requête avec une méthode GET et capture le résultat dans une chaîne de caractères.
*
* @return Le contenu de la réponse du serveur.
*/
std::string get();
/**
* Exécute la requête avec une méthode GET et télécharge la réponse dans un fichier.
*
* @param path Le chemin vers le fichier où télécharger.
*/
void download(const std::filesystem::path& path);
/**
* Vide la requête.
*/
~HttpRequest();
};
/**
* Une erreur lors de la transmission de la requête.
*/
class RequestException : public std::exception {
private:
int code;
@@ -23,6 +50,9 @@ namespace oki{
const char *what() const noexcept override;
};
/**
* Une erreur retournée par l'API.
*/
class APIException : public std::exception {
private:
std::string msg;

View File

@@ -1,13 +1,28 @@
#pragma once
namespace oki{
/**
* Un fichier temporaire utilisant le principe de RAII.
*/
class TmpFile {
private:
char filename[20];
int fd;
public:
/**
* Créé un nouveau fichier temporaire.
*/
TmpFile();
/**
* Récupère le chemin absolu vers le fichier temporaire.
* @return
*/
const char *getFilename();
/**
* Supprime le fichier temporaire.
*/
~TmpFile();
};
}

View File

@@ -5,13 +5,16 @@
#include "Version.h"
namespace oki{
/**
* Un modèle de paquet pour échanger avec l'API.
*/
class Package {
private:
std::string shortName;
std::string longName;
std::vector<Version> versions;
public:
Package(std::string_view shortName, std::string_view longName, std::vector<Version> versions= {});
Package(std::string_view shortName, std::string_view longName, std::vector<Version> versions = {});
const std::string& getShortName() const;
const std::string& getLongName() const;
const std::vector<Version>& getVersions() const;

View File

@@ -4,6 +4,9 @@
#include <vector>
namespace oki{
/**
* Un modèle de version d'un paquet pour communiquer avec l'API.
*/
class Version {
private:
std::string identifier;

View File

@@ -8,9 +8,24 @@
#include "../package/Package.h"
namespace oki{
/**
* Un dépôt où sont référencés des paquets.
*/
class Repository {
public:
/**
* Liste tous les paquets présents sur le dépôt.
*
* @return Tous les noms des paquets disponibles.
*/
virtual std::vector<Package> listPackages() = 0;
/**
* Récupère les informations détaillées d'un paquet nommé.
*
* @param packageName Le nom du paquet à utiliser.
* @return Les informations de ce paquet.
*/
virtual std::optional<Package> showPackage(std::string_view packageName) = 0;
virtual void download(const Version &packageVersion, const std::filesystem::path& destination) = 0;
virtual ~Repository() = default;