about summary refs log blame commit diff stats
path: root/include/video.hpp
blob: 456eda950f85ebe48e2ceec49546f3ecd05fece4 (plain) (tree)
1
2
3
4
5
6
7






                            




                                                       

                 



                                                                          

                   
                                                                          


                           

                                               




                                              



                                                                             


                        
                                                                              





                                              




                                                                                    






















                                                                     
                                                                    
                                                          
                                                                       


                                                      
#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