50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include "giomm/file.h"
|
|
#include "giomm/filemonitor.h"
|
|
#include "glibmm/refptr.h"
|
|
|
|
struct pollfd;
|
|
|
|
namespace waybar {
|
|
class CssReloadHelper {
|
|
public:
|
|
CssReloadHelper(std::string cssFile, std::function<void()> callback);
|
|
|
|
virtual ~CssReloadHelper() = default;
|
|
|
|
virtual void monitorChanges();
|
|
|
|
protected:
|
|
std::vector<std::string> parseImports(const std::string& cssFile);
|
|
|
|
void parseImports(const std::string& cssFile, std::unordered_map<std::string, bool>& imports);
|
|
|
|
void watchFiles(const std::vector<std::string>& files);
|
|
|
|
bool handleInotifyEvents(int fd);
|
|
|
|
bool watch(int inotifyFd, pollfd* pollFd);
|
|
|
|
virtual std::string getFileContents(const std::string& filename);
|
|
|
|
virtual std::string findPath(const std::string& filename);
|
|
|
|
void handleFileChange(Glib::RefPtr<Gio::File> const& file,
|
|
Glib::RefPtr<Gio::File> const& other_type,
|
|
Gio::FileMonitorEvent event_type);
|
|
|
|
private:
|
|
std::string m_cssFile;
|
|
|
|
std::function<void()> m_callback;
|
|
|
|
std::vector<std::tuple<Glib::RefPtr<Gio::FileMonitor>>> m_fileMonitors;
|
|
};
|
|
} // namespace waybar
|