transmission/libtransmission/watchdir-generic.cc

62 lines
1.7 KiB
C++
Raw Normal View History

// 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.
2022-08-17 16:08:36 +00:00
#include <utility>
#define LIBTRANSMISSION_WATCHDIR_MODULE
#include "transmission.h"
2022-08-10 13:34:51 +00:00
#include "watchdir-base.h"
2022-08-10 13:34:51 +00:00
namespace libtransmission
{
2022-08-10 13:34:51 +00:00
namespace
{
2022-08-10 13:34:51 +00:00
class GenericWatchdir final : public impl::BaseWatchdir
{
2022-08-10 13:34:51 +00:00
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() }
{
2022-08-10 13:34:51 +00:00
rescan_timer_->setCallback([this]() { scan(); });
rescan_timer_->startRepeating(rescan_interval);
scan();
}
2022-08-10 13:34:51 +00:00
private:
std::unique_ptr<Timer> rescan_timer_;
};
2022-08-10 13:34:51 +00:00
} // namespace
2022-08-10 13:34:51 +00:00
std::unique_ptr<Watchdir> Watchdir::createGeneric(
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);
}
2022-08-10 13:34:51 +00:00
#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*/)
{
2022-08-10 13:34:51 +00:00
return std::make_unique<GenericWatchdir>(dirname, std::move(callback), timer_maker, genericRescanInterval());
}
2022-08-10 13:34:51 +00:00
#endif
} // namespace libtransmission