blob: 456eda950f85ebe48e2ceec49546f3ecd05fece4 (
plain) (
tree)
|
|
#ifndef VIDEO_H
#define VIDEO_H
#include <string>
#include <optional>
#include <vector>
#include <nlohmann/json.hpp>
///
/// \brief Video namespace.
/// Contains the format, thumbnail, and video structs.
///
namespace Video {
///
/// \brief Format structure.
/// This saves a video format, with the necessary url and information.
///
struct format {
std::string format; /**< Name of the format provided by Youtube */
std::string url;
std::string vcodec;
std::string acodec;
std::string ext; /**< File Extention */
std::optional<float> quality;
std::optional<std::string> resolution;
std::optional<int> height;
std::optional<int> width;
};
///
/// \brief Thumbnail structure.
/// This saves a video thumbnail, with the necessary url and information.
///
struct thumbnail {
std::string url;
int preference; /**< The lower the prefrence, the worse the quality */
std::string id;
std::optional<std::string> resolution;
std::optional<int> height;
std::optional<int> width;
};
///
/// \brief Video structure.
/// The video structure will be used to store video objects, and will be used to
/// save to DB, and as a common format between invidious.io and yt-dlp.
///
struct video {
std::string id;
std::string title;
std::string url;
std::string channelId;
std::string channelUrl;
std::vector<format> formats;
std::vector<thumbnail> thumbnails;
std::optional<std::string> uploader;
std::optional<std::string> uploaderId;
std::optional<std::string> uploaderUrl;
std::optional<int> duration;
std::optional<int> viewcount;
std::optional<std::string> description;
};
void to_json(nlohmann::json& j, const format& f);
void to_json(nlohmann::json& j, const std::vector<format>& v);
void to_json(nlohmann::json& j, const thumbnail& t);
void to_json(nlohmann::json& j, const std::vector<thumbnail>& v);
void to_json(nlohmann::json& j, const video& v);
void from_json(const nlohmann::json& j, format& f);
void from_json(const nlohmann::json& j, std::vector<format>& v);
void from_json(const nlohmann::json& j, thumbnail& t);
void from_json(const nlohmann::json& j, std::vector<thumbnail>& v);
void from_json(const nlohmann::json& j, video& v);
};
#endif
|