Fix specifically getting posts from Akkoma instances
social.kernel.org
This commit is contained in:
parent
6130e92114
commit
57202de5e8
12
client.cpp
12
client.cpp
|
@ -121,7 +121,7 @@ std::vector<Post> MastodonClient::get_posts(const std::string& host, const std::
|
||||||
query += '&';
|
query += '&';
|
||||||
}
|
}
|
||||||
query += "max_id=";
|
query += "max_id=";
|
||||||
query += std::move(*max_id);
|
query += url_encode(std::move(*max_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string url = "https://"s + host + "/api/v1/accounts/" + account_id + "/statuses";
|
std::string url = "https://"s + host + "/api/v1/accounts/" + account_id + "/statuses";
|
||||||
|
@ -138,11 +138,11 @@ std::vector<Post> MastodonClient::get_posts(const std::string& host, const std::
|
||||||
return posts;
|
return posts;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Post> MastodonClient::get_post(const std::string& host, const std::string& id) {
|
std::optional<Post> MastodonClient::get_post(const std::string& host, std::string id) {
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Post post = this->_send_request(std::nullopt, "https://"s + host + "/api/v1/statuses/" + id);
|
Post post = this->_send_request(std::nullopt, "https://"s + host + "/api/v1/statuses/" + url_encode(std::move(id)));
|
||||||
handle_post_server(post, host);
|
handle_post_server(post, host);
|
||||||
return post;
|
return post;
|
||||||
} catch (const MastodonException& e) {
|
} catch (const MastodonException& e) {
|
||||||
|
@ -154,10 +154,10 @@ std::optional<Post> MastodonClient::get_post(const std::string& host, const std:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PostContext MastodonClient::get_post_context(const std::string& host, const std::string& id) {
|
PostContext MastodonClient::get_post_context(const std::string& host, std::string id) {
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
PostContext context = this->_send_request(std::nullopt, "https://"s + host + "/api/v1/statuses/" + id + "/context");
|
PostContext context = this->_send_request(std::nullopt, "https://"s + host + "/api/v1/statuses/" + url_encode(std::move(id)) + "/context");
|
||||||
|
|
||||||
for (Post& post : context.ancestors) {
|
for (Post& post : context.ancestors) {
|
||||||
handle_post_server(post, host);
|
handle_post_server(post, host);
|
||||||
|
@ -175,7 +175,7 @@ std::vector<Post> MastodonClient::get_tag_timeline(const std::string& host, cons
|
||||||
std::string url = "https://"s + host + "/api/v1/timelines/tag/" + url_encode(tag);
|
std::string url = "https://"s + host + "/api/v1/timelines/tag/" + url_encode(tag);
|
||||||
if (max_id) {
|
if (max_id) {
|
||||||
url += "?max_id=";
|
url += "?max_id=";
|
||||||
url += std::move(*max_id);
|
url += url_encode(std::move(*max_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Post> posts = this->_send_request(std::nullopt, url);
|
std::vector<Post> posts = this->_send_request(std::nullopt, url);
|
||||||
|
|
4
client.h
4
client.h
|
@ -68,8 +68,8 @@ public:
|
||||||
std::vector<Post> get_pinned_posts(std::string host, const std::string& account_id);
|
std::vector<Post> get_pinned_posts(std::string host, const std::string& account_id);
|
||||||
std::vector<Post> get_posts(const std::string& host, const std::string& account_id, PostSortingMethod sorting_method, std::optional<std::string> max_id);
|
std::vector<Post> get_posts(const std::string& host, const std::string& account_id, PostSortingMethod sorting_method, std::optional<std::string> max_id);
|
||||||
|
|
||||||
std::optional<Post> get_post(const std::string& host, const std::string& id);
|
std::optional<Post> get_post(const std::string& host, std::string id);
|
||||||
PostContext get_post_context(const std::string& host, const std::string& id);
|
PostContext get_post_context(const std::string& host, std::string id);
|
||||||
|
|
||||||
std::vector<Post> get_tag_timeline(const std::string& host, const std::string& tag, std::optional<std::string> max_id);
|
std::vector<Post> get_tag_timeline(const std::string& host, const std::string& tag, std::optional<std::string> max_id);
|
||||||
|
|
||||||
|
|
4
main.cpp
4
main.cpp
|
@ -48,8 +48,8 @@ int main(int argc, char** argv) {
|
||||||
serve_redirect(req, res, get_origin(req) + '/' + req.matches.str(1) + "/@" + req.matches.str(2) + req.matches.str(3), true);
|
serve_redirect(req, res, get_origin(req) + '/' + req.matches.str(1) + "/@" + req.matches.str(2) + req.matches.str(3), true);
|
||||||
});
|
});
|
||||||
|
|
||||||
server.Get("/(" DOMAIN_RE ")/@" ACCT_RE "/(\\d+)", status_route);
|
server.Get("/(" DOMAIN_RE ")/@" ACCT_RE "/([a-zA-Z0-9]+)", status_route);
|
||||||
server.Get("/(" DOMAIN_RE ")/users/(" ACCT_RE ")/statuses/(\\d+)", [](const httplib::Request& req, httplib::Response& res) {
|
server.Get("/(" DOMAIN_RE ")/users/(" ACCT_RE ")/statuses/([a-zA-Z0-9]+)", [](const httplib::Request& req, httplib::Response& res) {
|
||||||
serve_redirect(req, res, get_origin(req) + '/' + req.matches.str(1) + "/@" + req.matches.str(2) + '/' + req.matches.str(3), true);
|
serve_redirect(req, res, get_origin(req) + '/' + req.matches.str(1) + "/@" + req.matches.str(2) + '/' + req.matches.str(3), true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,6 @@ void tags_route(const httplib::Request& req, httplib::Response& res) {
|
||||||
std::optional<std::string> max_id;
|
std::optional<std::string> max_id;
|
||||||
if (req.has_param("max_id")) {
|
if (req.has_param("max_id")) {
|
||||||
max_id = req.get_param_value("max_id");
|
max_id = req.get_param_value("max_id");
|
||||||
if (max_id->empty() || max_id->find_first_not_of("0123456789") != std::string::npos) {
|
|
||||||
res.status = 400;
|
|
||||||
serve_error(req, res, "400: Bad Request", "Invalid max_id query paramter");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Post> posts;
|
std::vector<Post> posts;
|
||||||
|
|
|
@ -22,11 +22,6 @@ void user_route(const httplib::Request& req, httplib::Response& res) {
|
||||||
std::optional<std::string> max_id;
|
std::optional<std::string> max_id;
|
||||||
if (req.has_param("max_id")) {
|
if (req.has_param("max_id")) {
|
||||||
max_id = req.get_param_value("max_id");
|
max_id = req.get_param_value("max_id");
|
||||||
if (max_id->empty() || max_id->find_first_not_of("0123456789") != std::string::npos) {
|
|
||||||
res.status = 400;
|
|
||||||
serve_error(req, res, "400: Bad Request", "Invalid max_id query paramter");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Account> account;
|
std::optional<Account> account;
|
||||||
|
|
Loading…
Reference in New Issue