Add Instance::get_post_formats().
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
b9bf28c264
commit
a6b328c2d1
@ -24,6 +24,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace mastodonpp
|
namespace mastodonpp
|
||||||
{
|
{
|
||||||
@ -32,6 +33,7 @@ using std::uint64_t;
|
|||||||
using std::string;
|
using std::string;
|
||||||
using std::string_view;
|
using std::string_view;
|
||||||
using std::move;
|
using std::move;
|
||||||
|
using std::vector;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Holds the access data of an instance.
|
* @brief Holds the access data of an instance.
|
||||||
@ -151,12 +153,26 @@ public:
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
answer_type get_nodeinfo();
|
answer_type get_nodeinfo();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Returns the allowed mime types for statuses.
|
||||||
|
*
|
||||||
|
* Extracts `metadata.postFormats` from NodeInfo. If none can be found,
|
||||||
|
* returns `{"text/plain"}`.
|
||||||
|
*
|
||||||
|
* After the first call, the value is saved internally. Subsequent calls
|
||||||
|
* return the saved value.
|
||||||
|
*
|
||||||
|
* @since 0.3.0
|
||||||
|
*/
|
||||||
|
vector<string> get_post_formats();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const string _hostname;
|
const string _hostname;
|
||||||
const string _baseuri;
|
const string _baseuri;
|
||||||
string _access_token;
|
string _access_token;
|
||||||
uint64_t _max_chars;
|
uint64_t _max_chars;
|
||||||
string _proxy;
|
string _proxy;
|
||||||
|
vector<string> _post_formats;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mastodonpp
|
} // namespace mastodonpp
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace mastodonpp
|
namespace mastodonpp
|
||||||
{
|
{
|
||||||
@ -28,7 +27,6 @@ namespace mastodonpp
|
|||||||
using std::sort;
|
using std::sort;
|
||||||
using std::stoull;
|
using std::stoull;
|
||||||
using std::exception;
|
using std::exception;
|
||||||
using std::vector;
|
|
||||||
|
|
||||||
Instance::Instance(const string_view hostname, const string_view access_token)
|
Instance::Instance(const string_view hostname, const string_view access_token)
|
||||||
: _hostname{hostname}
|
: _hostname{hostname}
|
||||||
@ -108,4 +106,45 @@ answer_type Instance::get_nodeinfo()
|
|||||||
return make_request(http_method::GET, hrefs.back(), {});
|
return make_request(http_method::GET, hrefs.back(), {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<string> Instance::get_post_formats()
|
||||||
|
{
|
||||||
|
constexpr auto default_value{"text/plain"};
|
||||||
|
|
||||||
|
if (!_post_formats.empty())
|
||||||
|
{
|
||||||
|
return _post_formats;
|
||||||
|
}
|
||||||
|
|
||||||
|
debuglog << "Querying " << _hostname << " for postFormats…\n";
|
||||||
|
const auto answer{get_nodeinfo()};
|
||||||
|
if (!answer)
|
||||||
|
{
|
||||||
|
debuglog << "Couldn't get NodeInfo.\n";
|
||||||
|
_post_formats = {default_value};
|
||||||
|
return _post_formats;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr string_view searchstring{R"("postFormats":[)"};
|
||||||
|
auto pos{answer.body.find(searchstring)};
|
||||||
|
if (pos == string::npos)
|
||||||
|
{
|
||||||
|
debuglog << "Couldn't find metadata.postFormats.\n";
|
||||||
|
_post_formats = {default_value};
|
||||||
|
return _post_formats;
|
||||||
|
}
|
||||||
|
pos += searchstring.size();
|
||||||
|
auto endpos{answer.body.find("],", pos)};
|
||||||
|
string formats{answer.body.substr(pos, endpos - pos)};
|
||||||
|
debuglog << "Extracted postFormats: " << formats << '\n';
|
||||||
|
|
||||||
|
while ((pos = formats.find('"', 1)) != string::npos)
|
||||||
|
{
|
||||||
|
_post_formats.push_back(formats.substr(1, pos - 1));
|
||||||
|
formats.erase(0, pos + 2); // 2 is the length of: ",
|
||||||
|
debuglog << "Found postFormat: " << _post_formats.back() << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
return _post_formats;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace mastodonpp
|
} // namespace mastodonpp
|
||||||
|
Loading…
x
Reference in New Issue
Block a user