Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
#ifndef WATCHER_H
|
|
#define WATCHER_H
|
|
|
|
#include <condition_variable>
|
|
#include <unordered_set>
|
|
#include <set>
|
|
#include <uv.h>
|
|
#include <node_api.h>
|
|
#include "Event.hh"
|
|
#include "Debounce.hh"
|
|
#include "DirTree.hh"
|
|
#include "Signal.hh"
|
|
|
|
using namespace Napi;
|
|
|
|
struct Watcher {
|
|
std::string mDir;
|
|
std::unordered_set<std::string> mIgnore;
|
|
EventList mEvents;
|
|
void *state;
|
|
bool mWatched;
|
|
|
|
Watcher(std::string dir, std::unordered_set<std::string> ignore);
|
|
~Watcher();
|
|
|
|
bool operator==(const Watcher &other) const {
|
|
return mDir == other.mDir && mIgnore == other.mIgnore;
|
|
}
|
|
|
|
void wait();
|
|
void notify();
|
|
void notifyError(std::exception &err);
|
|
bool watch(FunctionReference callback);
|
|
bool unwatch(Function callback);
|
|
void unref();
|
|
bool isIgnored(std::string path);
|
|
|
|
static std::shared_ptr<Watcher> getShared(std::string dir, std::unordered_set<std::string> ignore);
|
|
|
|
private:
|
|
std::mutex mMutex;
|
|
std::mutex mCallbackEventsMutex;
|
|
std::condition_variable mCond;
|
|
uv_async_t *mAsync;
|
|
std::set<FunctionReference> mCallbacks;
|
|
std::set<FunctionReference>::iterator mCallbacksIterator;
|
|
bool mCallingCallbacks;
|
|
std::vector<Event> mCallbackEvents;
|
|
std::shared_ptr<Debounce> mDebounce;
|
|
Signal mCallbackSignal;
|
|
std::string mError;
|
|
|
|
Value callbackEventsToJS(const Env& env);
|
|
void clearCallbacks();
|
|
void triggerCallbacks();
|
|
static void fireCallbacks(uv_async_t *handle);
|
|
static void onClose(uv_handle_t *handle);
|
|
};
|
|
|
|
class WatcherError : public std::runtime_error {
|
|
public:
|
|
Watcher *mWatcher;
|
|
WatcherError(std::string msg, Watcher *watcher) : std::runtime_error(msg), mWatcher(watcher) {}
|
|
WatcherError(const char *msg, Watcher *watcher) : std::runtime_error(msg), mWatcher(watcher) {}
|
|
};
|
|
|
|
#endif
|
|
|