diff --git a/TODO b/TODO index 041e728..c6b6e0e 100644 --- a/TODO +++ b/TODO @@ -16,3 +16,4 @@ matrix: reddit: handle imgur albums handle youtube links + convert ampersands from 'amp&;' to '&' diff --git a/include/reddit.hpp b/include/reddit.hpp index 82f0b1a..48ea562 100644 --- a/include/reddit.hpp +++ b/include/reddit.hpp @@ -128,6 +128,7 @@ namespace reddit{ void set_useragent(const raii::string_base&); void set_useragent(raii::string_base&&); + void refresh_token(const auth_data& a); post get_new_post(const raii::string_base& subreddit); post get_new_post(const raii::string_base& subreddit, const raii::string_base& after); diff --git a/src/raii/curler.cpp b/src/raii/curler.cpp index 374f272..d2163a2 100644 --- a/src/raii/curler.cpp +++ b/src/raii/curler.cpp @@ -97,7 +97,11 @@ namespace raii{ return curl_string(tmp, strlen(tmp)); } curl_string curler::decode(const char* data, int* outlen, int len){ - return curl_string(curl_easy_unescape(m_curl, data, len, outlen), *outlen); + if(outlen) + return curl_string(curl_easy_unescape(m_curl, data, len, outlen), *outlen); + int out; + char* tmp = curl_easy_unescape(m_curl, data, len, &out); + return curl_string(tmp, out); } CURL* curler::get(void){ diff --git a/src/reddit.cpp b/src/reddit.cpp index 37ae5df..62242ce 100644 --- a/src/reddit.cpp +++ b/src/reddit.cpp @@ -380,6 +380,10 @@ namespace reddit{ m_useragent = std::move(s); } + void bot::refresh_token(const auth_data& a){ + m_access_token = _acquire_access_token(a); + } + post bot::get_new_post(const raii::string_base& subreddit){ return _get_post(subreddit, "new"_ss, "limit=1"_ss); } diff --git a/src/test.cpp b/src/test.cpp index 33e2e4e..278c7d5 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -20,6 +20,7 @@ #include #include //move #include +#include #define DBG_LEVEL_NONE 0 #define DBG_LEVEL_NORMAL 2 @@ -362,6 +363,8 @@ int main(){ DEBUG_PRINT("matrix bot initialized\n"); auto sync_reply = matbot.sync(0); //initial sync raii::string subreddit = "ProgrammerHumor"; + auto start_time = std::chrono::system_clock::now(); + bool should_quit = false; auto sync_callback = [&](const matrix::bot& bot, const matrix::msg_info& msg)->void @@ -381,6 +384,10 @@ int main(){ bot.send_message(msg.roomid, raii::string("Current subreddit is \"" + subreddit + "\"")); }else if(!strncmp(msg.body.get(), "!post ", 6)){ if(msg.body.length() > 6){ + auto cur_time = std::chrono::system_clock::now(); + std::chrono::duration elapsed = cur_time-start_time; + if(elapsed.count() >= 3600) + redditbot.refresh_token(reddit_auth); if(!strcmp(msg.body.get()+6, "hour")){ do_reddit_post(redditbot,bot,msg.roomid, subreddit, reddit::time::hour); }else if(!strcmp(msg.body.get()+6, "day")){