/* This file is part of mastodon-cpp. * Prints some information from the public timeline. */ // Don't compile this if the Easy-interface is turned off #ifndef WITHOUT_EASY #include #include #include #include #include #include // If we are compiling mastodon-cpp, use another include path #ifdef MASTODON_CPP #include "mastodon-cpp.hpp" #include "easy/all.hpp" #else #include // Include all headers in mastodon-cpp/easy/ #include #endif using Mastodon::API; using Mastodon::Easy; using std::cout; int main(int argc, char *argv[]) { if (argc < 3) { std::cerr << "usage: " << argv[0] << " \n"; return 1; } cout << "I'll show you the public timeline. Press CTRL-C to abort\n"; // These have to be static in order to use them in- and outside the thread static std::string stream; // You can abort the stream with this pointer (ptr->abort_stream()) static std::unique_ptr ptr; // Start a new thread for the stream std::thread pub_tl([=] { Easy masto(argv[1], argv[2]); masto.get_stream(Mastodon::API::v1::streaming_public, stream, ptr); }); while (true) { // Parse event stream and clear it afterwards std::vector events = Easy::parse_stream(stream); stream.clear(); // The contents of the stream are now in a vector of pairs // { Easy::event_type, std::string } for (const Easy::stream_event &event : events) { Easy::Status status; Easy::Notification notification; // Print out some information about the events switch (event.first) { case Easy::event_type::Update: status.from_string(event.second); cout << "Status from: " << status.account().acct() << " (" << status.url() << ")\n"; break; case Easy::event_type::Notification: notification.from_string(event.second); cout << "Notification involving: " << notification.account().acct() << " (" << notification.id() << ")\n"; break; case Easy::event_type::Delete: cout << "Deleted: " << event.second << '\n'; break; default: cout << "Something undefined happened. 😱\n"; } } std::this_thread::sleep_for(std::chrono::seconds(1)); } pub_tl.join(); } #else int main() { printf("mastodon-cpp was compiled without Easy support.\n"); return 255; } #endif // WITHOUT_EASY