rss-cli/src/rss.hpp

107 lines
2.8 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Tyler Perkins
// 7-23-21
// rss definition
//
#pragma once
#if _TESTS_ == 1
#include "config.hpp"
#endif
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include <stdexcept>
#include <rapidxml/rapidxml.hpp>
#include <rapidxml/rapidxml_print.hpp>
#include <curl/curl.h>
namespace rss_utils {
typedef std::vector<std::map<std::string, std::string>> item_map;
class item;
class rss {
public:
rss();
rss(const std::string&, bool = true);
rss(const char*, bool = true);
rss(const rss&);
~rss();
rss& operator=(const rss&);
rss* clone() const;
bool isOk() const;
void setURI(const std::string&, bool = true);
void setURI(const char*, bool = true);
std::string getURI() const;
bool update();
std::string getTitle() const;
std::string getLink() const;
std::string getDescription() const;
std::string getLanguage() const;
std::string getWebMaster() const;
std::string getCopyright() const;
std::string getPubDate() const;
std::string getManagingEditor() const;
std::string getGenerator() const;
std::string getDocs() const;
std::string getTTL() const;
std::string getLastBuildDate() const;
int getItemCount() const;
std::vector<item> getItems();
item& getItem(const int);
const item& getItem(const int) const;
item& operator[](const int);
const item& operator[](const int) const;
//TODO
//std::string getImage() const;
//std::string getCloud() const;
private:
bool parse(const std::string&);
std::vector<rapidxml::xml_node<>*> parseItems();
bool _ok;
std::string _uri;
rapidxml::xml_node<> *_item_node;
rapidxml::xml_document<> _doc;
std::vector<item> _items;
};
class item {
public:
item();
item(rapidxml::xml_node<>*);
item(const item&);
~item();
item& operator=(const item&);
item* clone() const;
std::string getTitle() const;
std::string getLink() const;
std::string getDescription() const;
std::string getAuthor() const;
std::string getCategory() const;
std::string getComments() const;
//std::string getEnclosure() const;
std::string getGuid() const;
std::string getPubDate() const;
std::string getSource() const;
private:
rapidxml::xml_node<> *_item;
};
size_t write_to_string(void*, size_t, size_t, std::string*);
}