transmission/libtransmission/watchdir-generic.cc

65 lines
1.8 KiB
C++

// This file Copyright © 2015-2023 Mnemosyne LLC.
// It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only),
// or any future license endorsed by Mnemosyne LLC.
// License text can be found in the licenses/ folder.
#include <chrono>
#include <memory>
#include <string_view>
#include <utility>
#define LIBTRANSMISSION_WATCHDIR_MODULE
#include "libtransmission/timer.h"
#include "libtransmission/watchdir.h"
#include "libtransmission/watchdir-base.h"
namespace libtransmission
{
namespace
{
class GenericWatchdir final : public impl::BaseWatchdir
{
public:
GenericWatchdir(
std::string_view dirname,
Callback callback,
libtransmission::TimerMaker& timer_maker,
std::chrono::milliseconds rescan_interval)
: BaseWatchdir{ dirname, std::move(callback), timer_maker }
, rescan_timer_{ timer_maker.create() }
{
rescan_timer_->set_callback([this]() { scan(); });
rescan_timer_->start_repeating(rescan_interval);
scan();
}
private:
std::unique_ptr<Timer> rescan_timer_;
};
} // namespace
std::unique_ptr<Watchdir> Watchdir::create_generic(
std::string_view dirname,
Callback callback,
libtransmission::TimerMaker& timer_maker,
std::chrono::milliseconds rescan_interval)
{
return std::make_unique<GenericWatchdir>(dirname, std::move(callback), timer_maker, rescan_interval);
}
#if !defined(WITH_INOTIFY) && !defined(WITH_KQUEUE) && !defined(_WIN32)
// no native impl, so use generic
std::unique_ptr<Watchdir> Watchdir::create(
std::string_view dirname,
Callback callback,
libtransmission::TimerMaker& timer_maker,
struct event_base* /*evbase*/)
{
return std::make_unique<GenericWatchdir>(dirname, std::move(callback), timer_maker, generic_rescan_interval());
}
#endif
} // namespace libtransmission