Высказывайте идеи как эффективнее интегрировать эту возможность с DC++.
Планирую сделать обработку клика по магниту типа btih т.к. их иногда кидают в чат
пока прикручивал либу сделал первый маленький pull request в upstream
Код интеграции с libtorrent получается достаточно простой: пример закачки сериала (Olga.2016.SATRip.Files-x)
Код: Выделить всё
void DownloadManager::test_torrent()
{
using namespace libtorrent;
namespace lt = libtorrent;
lt::error_code ec;
lt::settings_pack l_sett;
l_sett.set_int(lt::settings_pack::alert_mask
, lt::alert::error_notification
| lt::alert::storage_notification
| lt::alert::status_notification
| lt::alert::progress_notification
| lt::alert::peer_notification);
m_torrent_settings = std::make_unique<lt::session_settings>();
m_torrent_session = std::make_unique<lt::session>(l_sett);
m_torrent_session->start_lsd();
m_torrent_session->start_upnp();
m_torrent_session->start_natpmp();
l_sett.set_str(settings_pack::listen_interfaces, "0.0.0.0:8999");
lt::dht_settings dht;
dht.privacy_lookups = true;
m_torrent_session->set_dht_settings(dht);
{
m_torrent_settings->use_dht_as_fallback = false;
m_torrent_session->add_dht_router(std::make_pair(
std::string("router.bittorrent.com"), 6881));
m_torrent_session->add_dht_router(std::make_pair(
std::string("router.utorrent.com"), 6881));
m_torrent_session->add_dht_router(std::make_pair(
std::string("router.bitcomet.com"), 6881));
m_torrent_session->start_dht();
}
m_torrent_settings->user_agent = "FlylinkDC++/" LIBTORRENT_VERSION;
m_torrent_settings->choking_algorithm = session_settings::auto_expand_choker;
m_torrent_settings->disk_cache_algorithm = session_settings::avoid_readback;
m_torrent_settings->volatile_read_cache = false;
m_torrent_session->set_settings(*m_torrent_settings);
lt::add_torrent_params p;
p.save_path = ".";
p.url = "magnet:?xt=urn:btih:9017152afa06f5964c88faad524a6d443fdea787";
if (ec)
{
dcdebug("%s\n", ec.message().c_str());
dcassert(0);
}
m_torrent_session->add_torrent(p, ec);
if (ec)
{
dcdebug("%s\n", ec.message().c_str());
dcassert(0);
}
}