add simple transfer autoaccept plugin
This commit is contained in:
parent
9d1d0e8665
commit
2e0bc95816
@ -32,3 +32,17 @@ target_link_libraries(plugin_zox_ngc_hs PUBLIC
|
|||||||
solanaceae_plugin
|
solanaceae_plugin
|
||||||
solanaceae_zox
|
solanaceae_zox
|
||||||
)
|
)
|
||||||
|
|
||||||
|
########################################
|
||||||
|
|
||||||
|
add_library(plugin_transfer_auto_accept SHARED
|
||||||
|
./plugin_transfer_auto_accept.cpp
|
||||||
|
./transfer_auto_accept.hpp
|
||||||
|
./transfer_auto_accept.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(plugin_transfer_auto_accept PUBLIC
|
||||||
|
solanaceae_plugin
|
||||||
|
solanaceae_util
|
||||||
|
solanaceae_message3
|
||||||
|
)
|
||||||
|
72
plugins/plugin_transfer_auto_accept.cpp
Normal file
72
plugins/plugin_transfer_auto_accept.cpp
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#include <solanaceae/plugin/solana_plugin_v1.h>
|
||||||
|
|
||||||
|
#include "./transfer_auto_accept.hpp"
|
||||||
|
#include <solanaceae/util/config_model.hpp>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#define RESOLVE_INSTANCE(x) static_cast<x*>(solana_api->resolveInstance(#x))
|
||||||
|
#define PROVIDE_INSTANCE(x, p, v) solana_api->provideInstance(#x, p, static_cast<x*>(v))
|
||||||
|
|
||||||
|
static std::unique_ptr<TransferAutoAccept> g_taa = nullptr;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT const char* solana_plugin_get_name(void) {
|
||||||
|
return "TransferAutoAccept";
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_get_version(void) {
|
||||||
|
return SOLANA_PLUGIN_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_start(struct SolanaAPI* solana_api) {
|
||||||
|
std::cout << "PLUGIN TAA START()\n";
|
||||||
|
|
||||||
|
if (solana_api == nullptr) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegistryMessageModel* rmm = nullptr;
|
||||||
|
ConfigModelI* conf = nullptr;
|
||||||
|
|
||||||
|
{ // make sure required types are loaded
|
||||||
|
rmm = RESOLVE_INSTANCE(RegistryMessageModel);
|
||||||
|
conf = RESOLVE_INSTANCE(ConfigModelI);
|
||||||
|
|
||||||
|
if (rmm == nullptr) {
|
||||||
|
std::cerr << "PLUGIN TAA missing RegistryMessageModel\n";
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conf == nullptr) {
|
||||||
|
std::cerr << "PLUGIN TAA missing ConfigModelI\n";
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// static store, could be anywhere tho
|
||||||
|
// construct with fetched dependencies
|
||||||
|
g_taa = std::make_unique<TransferAutoAccept>(*rmm, *conf);
|
||||||
|
|
||||||
|
// register types
|
||||||
|
PROVIDE_INSTANCE(TransferAutoAccept, "TransferAutoAccept", g_taa.get());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT void solana_plugin_stop(void) {
|
||||||
|
std::cout << "PLUGIN TAA STOP()\n";
|
||||||
|
|
||||||
|
g_taa.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
SOLANA_PLUGIN_EXPORT void solana_plugin_tick(float delta) {
|
||||||
|
(void)delta;
|
||||||
|
//std::cout << "PLUGIN TAA TICK()\n";
|
||||||
|
g_taa->iterate();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // extern C
|
||||||
|
|
78
plugins/transfer_auto_accept.cpp
Normal file
78
plugins/transfer_auto_accept.cpp
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#include "./transfer_auto_accept.hpp"
|
||||||
|
|
||||||
|
#include <solanaceae/message3/components.hpp>
|
||||||
|
|
||||||
|
#include <solanaceae/util/config_model.hpp>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
TransferAutoAccept::TransferAutoAccept(RegistryMessageModel& rmm, ConfigModelI& conf) : _rmm(rmm), _conf(conf) {
|
||||||
|
_rmm.subscribe(this, RegistryMessageModel_Event::message_construct);
|
||||||
|
_rmm.subscribe(this, RegistryMessageModel_Event::message_updated);
|
||||||
|
|
||||||
|
if (!_conf.has_string("TransferAutoAccept", "save_path")) {
|
||||||
|
_conf.set("TransferAutoAccept", "save_path", std::string_view{"tmp_save_dir"});
|
||||||
|
}
|
||||||
|
|
||||||
|
// dont load module instead?
|
||||||
|
//if (!_conf.has_bool("TransferAutoAccept", "autoaccept")) {
|
||||||
|
//_conf.set("TransferAutoAccept", "autoaccept", false); // safe default
|
||||||
|
//}
|
||||||
|
|
||||||
|
if (!_conf.has_int("TransferAutoAccept", "autoaccept_limit")) {
|
||||||
|
_conf.set("TransferAutoAccept", "autoaccept_limit", 50l*1024l*1024l); // sane default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TransferAutoAccept::iterate(void) {
|
||||||
|
for (auto& it : _accept_queue) {
|
||||||
|
if (it.all_of<Message::Components::Transfer::ActionAccept>()) {
|
||||||
|
continue; // already accepted
|
||||||
|
}
|
||||||
|
|
||||||
|
it.emplace<Message::Components::Transfer::ActionAccept>(
|
||||||
|
// TODO: contact to entry
|
||||||
|
_conf.get_string("TransferAutoAccept", "save_path").value_or("tmp_save_dir")
|
||||||
|
);
|
||||||
|
std::cout << "TAA: auto accpeted transfer\n";
|
||||||
|
_rmm.throwEventUpdate(it);
|
||||||
|
}
|
||||||
|
_accept_queue.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TransferAutoAccept::checkMsg(Message3Handle h) {
|
||||||
|
if (h.all_of<Message::Components::Transfer::ActionAccept>()) {
|
||||||
|
return; // already accepted
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!h.all_of<Message::Components::Transfer::TagReceiving, Message::Components::Transfer::TagPaused, Message::Components::Transfer::FileInfo>()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto& file_info = h.get<Message::Components::Transfer::FileInfo>();
|
||||||
|
// TODO: contact to entry
|
||||||
|
if (file_info.total_size > uint64_t(_conf.get_int("TransferAutoAccept", "autoaccept_limit").value_or(1024*1024))) {
|
||||||
|
return; // too large
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_info.file_list.empty() || file_info.file_list.front().file_name.empty()) {
|
||||||
|
return; // bad file
|
||||||
|
}
|
||||||
|
|
||||||
|
_accept_queue.push_back(h);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TransferAutoAccept::onEvent(const Message::Events::MessageConstruct& e) {
|
||||||
|
std::cout << "TAA: msg c\n";
|
||||||
|
checkMsg(e.e);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TransferAutoAccept::onEvent(const Message::Events::MessageUpdated& e) {
|
||||||
|
std::cout << "TAA: msg u\n";
|
||||||
|
checkMsg(e.e);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
31
plugins/transfer_auto_accept.hpp
Normal file
31
plugins/transfer_auto_accept.hpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <solanaceae/message3/registry_message_model.hpp>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
// fwd
|
||||||
|
struct ConfigModelI;
|
||||||
|
|
||||||
|
class TransferAutoAccept : public RegistryMessageModelEventI {
|
||||||
|
RegistryMessageModel& _rmm;
|
||||||
|
//ContactModelI& _cm;
|
||||||
|
ConfigModelI& _conf;
|
||||||
|
|
||||||
|
std::vector<Message3Handle> _accept_queue;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TransferAutoAccept(RegistryMessageModel& rmm, ConfigModelI& conf);
|
||||||
|
|
||||||
|
// TODO: iterate
|
||||||
|
void iterate(void);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void checkMsg(Message3Handle h);
|
||||||
|
|
||||||
|
protected: // mm
|
||||||
|
bool onEvent(const Message::Events::MessageConstruct& e) override;
|
||||||
|
bool onEvent(const Message::Events::MessageUpdated& e) override;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user