mmcs-quotes-bridge/manager.h

52 lines
2.2 KiB
C++

#pragma once
#include "config.h"
#include "state.h"
#include "tg.h"
#include "vk.h"
#include <functional>
#include <string>
#include <vector>
namespace manager {
namespace td_api = td::td_api;
struct AbstractPost {
inline AbstractPost(long id, long date, std::string text) : id(id), date(date), text(text) {}
long id;
long date;
std::string text;
};
class RepostManager {
public:
RepostManager(uv_loop_t *eventLoop, tg::AuthCodeProvider tgCodeProvider, tg::PasswordProvider tgPasswordProvider, state::AppState *appState, config::AppConfig *config);
RepostManager(RepostManager&) = delete;
void start();
private:
void on_clients_ready();
void collect_all_vk_posts(std::function<void(std::vector<vk::Post>)> callback);
void collect_all_tg_posts(std::function<void(std::vector<td::tl::unique_ptr<td_api::message>>)> callback);
void collect_last_vk_posts(int count, std::function<void(std::vector<vk::Post>)> callback);
void collect_last_tg_posts(int count, std::function<void(std::vector<td::tl::unique_ptr<td_api::message>>)> callback);
void collect_vk_posts_from(int offset, int count, std::function<void(std::vector<vk::Post>)> callback);
void collect_tg_posts_from(long from, int count, std::function<void(std::vector<td::tl::unique_ptr<td_api::message>>)> callback);
void collect_vk_posts_from__intermediate(int offset, int count, std::shared_ptr<std::vector<vk::Post>> intermediateResult, std::function<void(std::vector<vk::Post>)> callback);
void collect_tg_posts_from__intermediate(long from, int count, std::shared_ptr<std::vector<td::tl::unique_ptr<td_api::message>>> intermediateResult, std::function<void(std::vector<td::tl::unique_ptr<td_api::message>>)> callback);
bool drop_posts_older_than(std::vector<AbstractPost> &posts, long lastPostId);
std::vector<AbstractPost> to_abstract_posts(std::vector<vk::Post> &posts);
std::vector<AbstractPost> to_abstract_posts(std::vector<td::tl::unique_ptr<td_api::message>> &posts);
void repost_all(std::vector<AbstractPost> posts);
state::AppState *m_appState;
config::AppConfig *m_appConfig;
vk::VKClient m_vk;
tg::TelegramClient m_tg;
};
}