Beispiel #1
0
static void handle_event(struct inotify_event *ievent)
{
	char *event_filename;
	char *dirname = NULL;
	char *fullname;

	assert(ievent);

	if (ievent->len) {
		event_filename = ievent->name;
	} else {
		return;
	}

	for (size_t i = 0; i < wds_count; i++) {
		if (wds[i] == ievent->wd) {
			dirname = dirnames[i];
			break;
		}
	}
	assert(dirname);
	fullname = strjoin(dirname, "/", event_filename, NULL);

	switch (ievent->mask & (IN_CLOSE_WRITE | IN_CREATE)) {
		case IN_CLOSE_WRITE:
			// We don't treat directories modifications
			if (ievent->mask & IN_ISDIR) {
				break;
			}
			if (!is_valid_filename(event_filename)) {
				break;
			}

			reload_callback(callback_arg, fullname);
			break;
		case IN_CREATE:
			// recursively watch new dirs
			if (!(ievent->mask & IN_ISDIR)) {
				break;
			}

			livecoding_watch_directory(fullname);
			break;
		default:
			break;
	}

	free(fullname);
}
Beispiel #2
0
void File_Browser::_reload_callback()
{
    reload_callback(true);
}