static GFileMonitor *
create_monitor (const gchar *path, gboolean is_dir)
{
  GFile *file;
  GFileMonitor *monitor;
  GError *error;

  error = NULL;
  file = g_file_new_for_path (path);
  if (is_dir)
    monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, &error);
  else
    monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);

  if (monitor == NULL)
    {
      g_warning ("Error monitoring %s at %s: %s (%s, %d)",
                 is_dir ? "directory" : "file",
                 path,
                 error->message, g_quark_to_string (error->domain), error->code);
      g_error_free (error);
    }
  g_object_unref (file);

  return monitor;
}
static void
actually_add_monitor (RhythmDB *db, GFile *directory, GError **error)
{
	GFileMonitor *monitor;

	if (directory == NULL) {
		return;
	}

	g_mutex_lock (&db->priv->monitor_mutex);

	if (g_hash_table_lookup (db->priv->monitored_directories, directory)) {
		g_mutex_unlock (&db->priv->monitor_mutex);
		return;
	}

	monitor = g_file_monitor_directory (directory, G_FILE_MONITOR_SEND_MOVED, db->priv->exiting, error);
	if (monitor != NULL) {
		g_signal_connect_object (G_OBJECT (monitor),
					 "changed",
					 G_CALLBACK (rhythmdb_directory_change_cb),
					 db, 0);
		g_hash_table_insert (db->priv->monitored_directories,
				     g_object_ref (directory),
				     monitor);
	}

	g_mutex_unlock (&db->priv->monitor_mutex);
}
Exemple #3
0
static gboolean
updater_add_watcher (updater_t *updater, GFile *file)
{
	GFileMonitor *monitor;
	GError *err = NULL;
	gchar *path;

	g_return_val_if_fail (updater, FALSE);
	g_return_val_if_fail (file, FALSE);

	if (!updater_is_dir (file)) {
		return FALSE;
	}

	path = g_file_get_path (file);

	monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, &err);
	if (err) {
		g_printerr ("Unable to monitor '%s', %s\n", path, err->message);
		g_error_free (err);
		g_free (monitor);
		g_free (path);
		return FALSE;
	}

	g_signal_connect (monitor, "changed", (gpointer) on_directory_event, updater);

	/* path ownership transfered to the hash */
	g_hash_table_insert (updater->watchers, path, monitor);

	updater_find_sub_directories (updater, file);

	return TRUE;
}
Exemple #4
0
void watch_dir(const gchar * uri)
{
    if(!watches)
        watches = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, watch_free);

    if(!g_hash_table_lookup(watches, uri))
    {
        GError * error = NULL;
        DirWatch * watch = g_new(DirWatch, 1);
        GFile * f = g_file_new_for_uri(uri);
        watch->monitor = g_file_monitor_directory(f, G_FILE_MONITOR_NONE, NULL, &error);
        g_object_unref(f);
        if(error)
        {
            g_printerr("Unable to monitor directory %s (%s).\n", uri, error->message);
            g_error_free(error);
            g_free(watch);
        }
        else
        {
            g_debug("Monitor directory %s", uri);
            // connect to signal
            g_signal_connect(watch->monitor, "changed", (gpointer)changed_callback, NULL);
            g_hash_table_insert(watches, g_strdup(uri), watch);
        }
    }
}
Exemple #5
0
AnjutaProjectNode*
dir_group_node_new (GFile *file, GObject *emitter)
{
	AnjutaDirGroupNode *group = NULL;

	group = g_object_new (ANJUTA_TYPE_DIR_GROUP_NODE, NULL);
	group->base.type = ANJUTA_PROJECT_GROUP;
	group->base.native_properties = NULL;
	group->base.custom_properties = NULL;
	group->base.file = g_object_ref (file);
	group->base.name = NULL;
	group->base.state = ANJUTA_PROJECT_CAN_ADD_GROUP |
						ANJUTA_PROJECT_CAN_ADD_SOURCE |
						ANJUTA_PROJECT_CAN_REMOVE |
						ANJUTA_PROJECT_REMOVE_FILE;

	group->emitter = emitter;

	/* Connect monitor if file exist */
	if (g_file_query_exists (file, NULL))
	{
		group->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);

		g_signal_connect (G_OBJECT (group->monitor),
							"changed",
							G_CALLBACK (on_file_changed),
							group);
	}

	return ANJUTA_PROJECT_NODE (group);
}
Exemple #6
0
gboolean
caja_monitor_active (void)
{
    static gboolean tried_monitor = FALSE;
    static gboolean monitor_success;
    GFileMonitor *dir_monitor;
    GFile *file;

    if (tried_monitor == FALSE)
    {
        file = g_file_new_for_path (g_get_home_dir ());
        dir_monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
        g_object_unref (file);

        monitor_success = (dir_monitor != NULL);
        if (dir_monitor)
        {
            g_object_unref (dir_monitor);
        }

        tried_monitor = TRUE;
    }

    return monitor_success;
}
void locke_appmanager_init(LockeAppManager *lam, gchar *folder, GError **err) {
	gchar deployFolder[1024];
	strcpy(deployFolder, folder);
	if (deployFolder[strlen(deployFolder) - 1] != '/') {
		deployFolder[strlen(deployFolder) + 1] = '\0';
		deployFolder[strlen(deployFolder)] = '/';
	}

	g_log(LSVR_DOMAIN, G_LOG_LEVEL_INFO, "Will be looking for deploys in folder %s", deployFolder);
	lam->deployFolder = g_file_new_for_path(deployFolder);

	/* Firstly, perform an initial scan on this folder, to add the applications
	 * that are already there*/
	locke_appmanager_scan_for_deploys(lam, lam->deployFolder);

	/* Monitor deploy dir, to receive events whenever a file is created,
	 * deleted, moved, etc on this folder */
	lam->deployDirMonitor = g_file_monitor_directory(lam->deployFolder,
			G_FILE_MONITOR_NONE, NULL, err);
	if (*err != NULL) {
		/* Report error to user, and free error */
		g_log(LSVR_DOMAIN, G_LOG_LEVEL_ERROR, "Unable to monitor directory '%s': %s", deployFolder,
				(*err)->message);
		return;
	}
	/* Sets the monitor check rate */
	g_file_monitor_set_rate_limit(lam->deployDirMonitor, 3000/* 3 secs*/);
	/* Connects to the "changed" signal, to be able to receive the events */
	g_signal_connect(lam->deployDirMonitor, "changed",
			G_CALLBACK (locke_appmanager_file_changed), lam);

}
static void
nm_vpn_manager_init (NMVPNManager *self)
{
	NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
	GFile *file;
	GDir *dir;
	const char *fn;
	char *path;

	priv->services = g_hash_table_new_full (g_str_hash, g_str_equal,
	                                        NULL, g_object_unref);

	/* Watch the VPN directory for changes */
	file = g_file_new_for_path (VPN_NAME_FILES_DIR "/");
	priv->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
	g_object_unref (file);
	if (priv->monitor) {
		priv->monitor_id = g_signal_connect (priv->monitor, "changed",
		                                     G_CALLBACK (vpn_dir_changed), self);
	}

	/* Load VPN service files */
	dir = g_dir_open (VPN_NAME_FILES_DIR, 0, NULL);
	if (dir) {
		while ((fn = g_dir_read_name (dir))) {
			/* only parse filenames that end with .name */
			if (g_str_has_suffix (fn, ".name")) {
				path = g_build_filename (VPN_NAME_FILES_DIR, fn, NULL);
				try_add_service (self, path);
				g_free (path);
			}
		}
		g_dir_close (dir);
	}
}
void vfs_backend_add_monitor (const gchar *cURI, gboolean bDirectory, CairoDockFMMonitorCallback pCallback, gpointer user_data)
{
	g_return_if_fail (cURI != NULL);
	GError *erreur = NULL;
	GFileMonitor *pMonitor;
	GFile *pFile = (*cURI == '/' ? g_file_new_for_path (cURI) : g_file_new_for_uri (cURI));
	if (bDirectory)
		pMonitor = g_file_monitor_directory (pFile,
			G_FILE_MONITOR_WATCH_MOUNTS,
			NULL,
			&erreur);
	else
		pMonitor = g_file_monitor_file (pFile,
			G_FILE_MONITOR_WATCH_MOUNTS,
			NULL,
			&erreur);
	//g_object_unref (pFile);
	if (erreur != NULL)
	{
		cd_warning ("Attention : couldn't add monitor on '%s' (%d) [%s]", cURI, bDirectory, erreur->message);
		g_error_free (erreur);
		return ;
	}
	
	gpointer *data = g_new0 (gpointer, 3);
	data[0] = pCallback;
	data[1] = user_data;
	data[2] = pMonitor;
	g_signal_connect (G_OBJECT (pMonitor), "changed", G_CALLBACK (_on_monitor_changed), data);
	
	g_hash_table_insert (s_hMonitorHandleTable, g_strdup (cURI), data);
	cd_message (">>> moniteur ajoute sur %s (%x)", cURI, user_data);
}
void
nm_dispatcher_init (void)
{
	GFile *file;
	guint i;
	GError *error = NULL;

	for (i = 0; i < G_N_ELEMENTS (monitors); i++) {
		file = g_file_new_for_path (monitors[i].dir);
		monitors[i].monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
		if (monitors[i].monitor) {
			g_signal_connect (monitors[i].monitor, "changed", G_CALLBACK (dispatcher_dir_changed), &monitors[i]);
			dispatcher_dir_changed (monitors[i].monitor, file, NULL, 0, &monitors[i]);
		}
		g_object_unref (file);
	}

	dispatcher_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
	                                                  G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
	                                                      G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
	                                                  NULL,
	                                                  NM_DISPATCHER_DBUS_SERVICE,
	                                                  NM_DISPATCHER_DBUS_PATH,
	                                                  NM_DISPATCHER_DBUS_INTERFACE,
	                                                  NULL, &error);
	if (!dispatcher_proxy) {
		_LOGE ("could not get dispatcher proxy! %s", error->message);
		g_clear_error (&error);
	}
}
Exemple #11
0
NautilusMonitor *
nautilus_monitor_directory (GFile *location)
{
	GFileMonitor *dir_monitor;
	NautilusMonitor *ret;

	ret = g_slice_new0 (NautilusMonitor);
	dir_monitor = g_file_monitor_directory (location, G_FILE_MONITOR_WATCH_MOUNTS, NULL, NULL);

	if (dir_monitor != NULL) {
		ret->monitor = dir_monitor;
	} else if (!g_file_is_native (location)) {
		ret->location = g_object_ref (location);
		ret->volume_monitor = g_volume_monitor_get ();
	}

	if (ret->monitor != NULL) {
		g_signal_connect (ret->monitor, "changed",
				  G_CALLBACK (dir_changed), ret);
	}

	if (ret->volume_monitor != NULL) {
		g_signal_connect (ret->volume_monitor, "mount-removed",
				  G_CALLBACK (mount_removed), ret);
	}

	/* We return a monitor even on failure, so we can avoid later trying again */
	return ret;
}
GFileMonitor* monitor_trash()
{
    atexit(destroy_monitor);
    trash_can = g_file_new_for_uri("trash:///");
    m = g_file_monitor_directory(trash_can, G_FILE_MONITOR_SEND_MOVED, NULL, NULL);
    g_signal_connect(m, "changed", G_CALLBACK(trash_changed), NULL);
    return m;
}
/**
 * pk_backend_initialize:
 * This should only be run once per backend load, i.e. not every transaction
 */
void
pk_backend_initialize (GKeyFile *conf, PkBackend *backend)
{
	gboolean ret;
	GFile *file = NULL;
	GError *error = NULL;
	GKeyFile *key_file = NULL;
	gchar *config_file = NULL;
	GList *mounts;

	/* use logging */
	pk_debug_add_log_domain (G_LOG_DOMAIN);
	pk_debug_add_log_domain ("Yum");

	/* create private area */
	priv = g_new0 (PkBackendYumPrivate, 1);

	g_debug ("backend: initialize");
	priv->spawn = pk_backend_spawn_new (conf);
	pk_backend_spawn_set_filter_stderr (priv->spawn, pk_backend_stderr_cb);
	pk_backend_spawn_set_filter_stdout (priv->spawn, pk_backend_stdout_cb);
	pk_backend_spawn_set_name (priv->spawn, "yum");
	pk_backend_spawn_set_allow_sigkill (priv->spawn, FALSE);

	/* coldplug the mounts */
	priv->volume_monitor = g_volume_monitor_get ();
	mounts = g_volume_monitor_get_mounts (priv->volume_monitor);
	g_list_foreach (mounts, (GFunc) pk_backend_mount_add, NULL);
	g_list_foreach (mounts, (GFunc) g_object_unref, NULL);
	g_list_free (mounts);

	/* setup a file monitor on the repos directory */
	file = g_file_new_for_path (YUM_REPOS_DIRECTORY);
	priv->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, &error);
	if (priv->monitor != NULL) {
		g_signal_connect (priv->monitor, "changed", G_CALLBACK (pk_backend_yum_repos_changed_cb), backend);
	} else {
		g_warning ("failed to setup monitor: %s", error->message);
		g_error_free (error);
	}

	/* read the config file */
	key_file = g_key_file_new ();
	config_file = g_build_filename (SYSCONFDIR, "PackageKit", "Yum.conf", NULL);
	g_debug ("loading configuration from %s", config_file);
	ret = g_key_file_load_from_file (key_file, config_file, G_KEY_FILE_NONE, &error);
	if (!ret) {
		g_warning ("failed to load Yum.conf: %s", error->message);
		g_error_free (error);
		goto out;
	}
out:
	g_free (config_file);
	if (key_file != NULL)
		g_key_file_free (key_file);
	if (file != NULL)
		g_object_unref (file);
}
Exemple #14
0
static MenuMonitor *
register_monitor (const char *path,
		  gboolean    is_directory)
{
#if !GLIB_CHECK_VERSION(2, 36, 0)
  static gboolean  initted = FALSE;
#endif
  MenuMonitor     *retval;
  GFile           *file;

#if !GLIB_CHECK_VERSION(2, 36, 0)
  if (!initted)
    {
      /* This is the only place where we're using GObject and the app can't
       * know we're using it, so we need to init the type system ourselves. */
      g_type_init ();
      initted = TRUE;
    }
#endif

  retval = g_new0 (MenuMonitor, 1);

  retval->path         = g_strdup (path);
  retval->refcount     = 1;
  retval->is_directory = is_directory != FALSE;

  file = g_file_new_for_path (retval->path);

  if (file == NULL)
    {
      menu_verbose ("Not adding monitor on '%s', failed to create GFile\n",
                    retval->path);
      return retval;
    }

  if (retval->is_directory)
      retval->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE,
                                                  NULL, NULL);
  else
      retval->monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE,
                                             NULL, NULL);

  g_object_unref (G_OBJECT (file));

  if (retval->monitor == NULL)
    {
      menu_verbose ("Not adding monitor on '%s', failed to create monitor\n",
                    retval->path);
      return retval;
    }

  g_signal_connect (retval->monitor, "changed",
                    G_CALLBACK (monitor_callback), retval);

  return retval;
}
static void
nm_vpn_manager_init (NMVpnManager *self)
{
	NMVpnManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
	GFile *file;
	GSList *infos, *info;
	const char *conf_dir_etc = _nm_vpn_plugin_info_get_default_dir_etc ();
	const char *conf_dir_lib = _nm_vpn_plugin_info_get_default_dir_lib ();

	/* Watch the VPN directory for changes */
	file = g_file_new_for_path (conf_dir_lib);
	priv->monitor_lib = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
	g_object_unref (file);
	if (priv->monitor_lib) {
		priv->monitor_id_lib = g_signal_connect (priv->monitor_lib, "changed",
		                                         G_CALLBACK (vpn_dir_changed), self);
	}

	file = g_file_new_for_path (conf_dir_etc);
	priv->monitor_etc = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
	g_object_unref (file);
	if (priv->monitor_etc) {
		priv->monitor_id_etc = g_signal_connect (priv->monitor_etc, "changed",
		                                         G_CALLBACK (vpn_dir_changed), self);
	}

	/* first read conf_dir_lib. The name files are not really user configuration, but
	 * plugin configuration. Hence we expect ~newer~ plugins to install their files
	 * in /usr/lib/NetworkManager. We want to prefer those files.
	 * In case of no-conflict, the order doesn't matter. */
	infos = _nm_vpn_plugin_info_list_load_dir (conf_dir_lib, TRUE, 0, NULL, NULL);
	for (info = infos; info; info = info->next)
		try_add_plugin (self, info->data);
	g_slist_free_full (infos, g_object_unref);

	infos = _nm_vpn_plugin_info_list_load_dir (conf_dir_etc, TRUE, 0, NULL, NULL);
	for (info = infos; info; info = info->next)
		try_add_plugin (self, info->data);
	g_slist_free_full (infos, g_object_unref);

	priv->active_services = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
}
Exemple #16
0
/* Buids a file watcher for the directory so that when it
   changes we can check to see if our reboot-required is
   there. */
static void
setup_restart_watch (void)
{
	GFile * filedir = g_file_new_for_path("/var/run");
	GFileMonitor * filemon = g_file_monitor_directory(filedir, G_FILE_MONITOR_NONE, NULL, NULL);
	if (filemon != NULL) {
		g_signal_connect(G_OBJECT(filemon), "changed", G_CALLBACK(restart_dir_changed), NULL);
	}
	restart_dir_changed();
	return;
}
static void
try_monitor_path (NemoActionConfigWidget *widget, const gchar *path)
{
    GFile *dir = g_file_new_for_path (path);

    GFileMonitor *mon = g_file_monitor_directory (dir, G_FILE_MONITOR_SEND_MOVED, NULL, NULL);

    g_object_unref (dir);

    if (mon != NULL) {
        g_signal_connect (mon, "changed", G_CALLBACK (on_dir_changed), widget);
        widget->dir_monitors = g_list_append (widget->dir_monitors, mon);
    }
}
Exemple #18
0
void
monitor_create (GList **list, const char *path, void *data)
{
	static struct state state;

	state.list = list;
	state.data = data;

	dir = g_file_new_for_path(path);

	if (!(monitor = g_file_monitor_directory(dir, G_FILE_MONITOR_NONE, NULL, NULL)))
		return;

	g_signal_connect(monitor, "changed", G_CALLBACK(on_changed), &state);
}
static void
webapp_monitor_init (WebappMonitor *monitor)
{
  gchar *path = g_strdup_printf ("%s/.local/share/applications", g_get_home_dir ());
  GFile *file = g_file_new_for_path (path);
  GError *error = NULL;

  monitor->instance = NULL;
  monitor->icon_loader_callback = NULL;

  monitor->file_monitor = g_file_monitor_directory (file, 0, NULL, &error);
  if (monitor->file_monitor) {
    GDir *dir;

    /* Check already existing files on startup */
    dir = g_dir_open (path, 0, &error);
    if (dir) {
      const gchar *name;

      while (name = g_dir_read_name (dir)) {
	if (g_str_has_prefix (name, "chrome-")) {
	  gchar *full_path = g_strdup_printf ("%s/%s", path, name);
	  GFile *file_to_check = g_file_new_for_path (full_path);

	  on_directory_changed (monitor->file_monitor, file_to_check, NULL, G_FILE_MONITOR_EVENT_CREATED, monitor);

	  g_free (full_path);
	  g_object_unref (file_to_check);
	}
      }

      g_dir_close (dir);
    } else {
      g_error ("Error opening directory %s: %s\n", path, error->message);
      g_error_free (error);
    }

    /* Listen to changes in the ~/.local/share/applications directory */
    g_signal_connect (monitor->file_monitor, "changed", G_CALLBACK (on_directory_changed), monitor);
  } else {
    g_error ("Error monitoring directory: %s\n", error->message);
    g_error_free (error);
  }

  g_free (path);
  g_object_unref (file);
}
Exemple #20
0
GFileMonitor* fm_monitor_directory(GFile* gf, GError** err)
{
    GFileMonitor* ret = NULL;
    G_LOCK(hash);
    ret = (GFileMonitor*)g_hash_table_lookup(hash, gf);
    if(!ret && !g_file_is_native(gf))
        ret = (GFileMonitor*)g_hash_table_lookup(dummy_hash, gf);
    if(ret)
        g_object_ref(ret);
    else
    {
        GError* e = NULL;
        ret = g_file_monitor_directory(gf, G_FILE_MONITOR_WATCH_MOUNTS, NULL, &e);
        if(ret)
        {
            g_object_weak_ref(G_OBJECT(ret), (GWeakNotify)on_monitor_destroy, gf);
            g_file_monitor_set_rate_limit(ret, MONITOR_RATE_LIMIT);
            g_hash_table_insert(hash, g_object_ref(gf), ret);
        }
        else
        {
            if(e)
            {
                if(e->domain == G_IO_ERROR && e->code == G_IO_ERROR_NOT_SUPPORTED)
                {
                    /* create a fake file monitor */
                    ret = fm_dummy_monitor_new();
                    g_error_free(e);
                    g_object_weak_ref(G_OBJECT(ret), (GWeakNotify)on_dummy_monitor_destroy, gf);
                    g_hash_table_insert(dummy_hash, g_object_ref(gf), ret);
                }
                else
                {
                    g_debug("error creating file monitor: %S", e->message);
                    G_UNLOCK(hash);
                    if(err)
                        *err = e;
                    else
                        g_error_free(e);
                    return NULL;
                }
            }
        }
    }
    G_UNLOCK(hash);
    return ret;
}
Exemple #21
0
static gboolean
add_watch (const gchar       *cmdline,
           WatchType          watch_type,
           GFileMonitorFlags  flags,
           gboolean           connect_handler)
{
  GFileMonitor *monitor = NULL;
  GError *error = NULL;
  GFile *file;

  file = g_file_new_for_commandline_arg (cmdline);

  if (watch_type == WATCH_AUTO)
    {
      GFileInfo *info;
      guint32 type;

      info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NONE, NULL, &error);
      if (!info)
        goto err;

      type = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_STANDARD_TYPE);
      watch_type = (type == G_FILE_TYPE_DIRECTORY) ? WATCH_DIR : WATCH_FILE;
    }

  if (watch_type == WATCH_DIR)
    monitor = g_file_monitor_directory (file, flags, NULL, &error);
  else
    monitor = g_file_monitor (file, flags, NULL, &error);

  if (!monitor)
    goto err;

  if (connect_handler)
    g_signal_connect (monitor, "changed", G_CALLBACK (watch_callback), g_strdup (cmdline));

  monitor = NULL; /* leak */

  return TRUE;

err:
  g_printerr ("error: %s: %s", cmdline, error->message);
  g_error_free (error);

  return FALSE;
}
// FIXME: get the apt directories with apt-config or something
static gboolean 
monitor_init(UpgradeNotifier *un)
{
   int i;
   GFileMonitor *monitor_handle;

   // monitor these dirs
   static const char *monitor_dirs[] = { 
      "/var/lib/apt/lists/", "/var/lib/apt/lists/partial/", 
      "/var/cache/apt/archives/", "/var/cache/apt/archives/partial/", 
      HOOKS_DIR, 
      CRASHREPORT_DIR,
      NULL};
   for(i=0;monitor_dirs[i] != NULL;i++) {
      GError *error = NULL;
      GFile *gf = g_file_new_for_path(monitor_dirs[i]);
      monitor_handle = g_file_monitor_directory(gf, 0, NULL, &error);
      if(monitor_handle)
	 g_signal_connect(monitor_handle, "changed", (GCallback)monitor_cb, un);
      else
	 g_warning("can not add '%s'", monitor_dirs[i]);
   }

   // and those files
   static const char *monitor_files[] = { 
      "/var/lib/dpkg/status", 
      "/var/lib/update-notifier/dpkg-run-stamp", 
      "/var/lib/apt/periodic/update-success-stamp",
      REBOOT_FILE,
      UNICAST_LOCAL_AVAHI_FILE,
      NULL};
   for(i=0;monitor_files[i] != NULL;i++) {
      GError *error = NULL;
      GFile *gf = g_file_new_for_path(monitor_files[i]);
      monitor_handle = g_file_monitor_file(gf, 0, NULL, &error);
      if(monitor_handle)
	 g_signal_connect(monitor_handle, "changed", (GCallback)monitor_cb, un);
      else
	 g_warning("can not add '%s'", monitor_dirs[i]);
   }

   g_timeout_add (TIMEOUT_FAM, (GSourceFunc)file_monitor_periodic_check, un);


   return TRUE;
}
static void
setup_ifcfg_monitoring (SCPluginIfcfg *plugin)
{
	SCPluginIfcfgPrivate *priv = SC_PLUGIN_IFCFG_GET_PRIVATE (plugin);
	GFile *file;
	GFileMonitor *monitor;

	file = g_file_new_for_path (IFCFG_DIR "/");
	monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
	g_object_unref (file);

	if (monitor) {
		priv->ifcfg_monitor_id = g_signal_connect (monitor, "changed",
		                                           G_CALLBACK (ifcfg_dir_changed), plugin);
		priv->ifcfg_monitor = monitor;
	}
}
Exemple #24
0
void
cheese_thumb_view_start_monitoring_video_path (CheeseThumbView *thumb_view, const char *path_videos)
{
  CheeseThumbViewPrivate *priv = cheese_thumb_view_get_instance_private (thumb_view);

  if (priv->video_file_monitor != NULL)
    return;

  GFile *file;

  /* connect signal to video path */
  file                     = g_file_new_for_path (path_videos);
  priv->video_file_monitor = g_file_monitor_directory (file, G_FILE_MONITOR_SEND_MOVED, NULL, NULL);
  g_signal_connect (priv->video_file_monitor, "changed", G_CALLBACK (cheese_thumb_view_monitor_cb), thumb_view);

  g_object_unref (file);

}
AthenaMonitor *
athena_monitor_directory (GFile *location)
{
	GFileMonitor *dir_monitor;
	AthenaMonitor *ret;

	dir_monitor = g_file_monitor_directory (location, G_FILE_MONITOR_WATCH_MOUNTS, NULL, NULL);

	ret = g_new0 (AthenaMonitor, 1);
	ret->monitor = dir_monitor;

	if (ret->monitor) {
		g_signal_connect (ret->monitor, "changed", (GCallback)dir_changed, ret);
	}

	/* We return a monitor even on failure, so we can avoid later trying again */
	return ret;
}
gboolean
gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
{
	GsPluginData *priv = gs_plugin_get_data (plugin);
	g_autoptr(GFile) file = g_file_new_for_path (priv->reposdir);

	/* watch for changes */
	priv->monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, cancellable, error);
	if (priv->monitor == NULL) {
		gs_utils_error_convert_gio (error);
		return FALSE;
	}
	g_signal_connect (priv->monitor, "changed",
			  G_CALLBACK (gs_plugin_repos_changed_cb), plugin);

	/* unconditionally at startup */
	return gs_plugin_repos_setup (plugin, cancellable, error);
}
Exemple #27
0
int
main (int     argc,
      char  **argv)
{
  GFileMonitor *monitor;
  GFile *curdir;
  GError *error = NULL;
  GPtrArray *new_argv;
  int i;
  struct TmpdirLifecyleData data;

  g_type_init ();

  memset (&data, 0, sizeof (data));

  data.loop = g_main_loop_new (NULL, TRUE);

  curdir = g_file_new_for_path (".");
  monitor = g_file_monitor_directory (curdir, 0, NULL, &error);
  if (!monitor)
    exit (1);
  g_signal_connect (monitor, "changed",
		    G_CALLBACK (on_dir_changed), &data);

  new_argv = g_ptr_array_new ();
  for (i = 1; i < argc; i++)
    g_ptr_array_add (new_argv, argv[i]);
  g_ptr_array_add (new_argv, NULL);

  if (!g_spawn_async (NULL, (char**)new_argv->pdata, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
                      NULL, NULL, &data.pid, &error))
    {
      g_printerr ("%s\n", error->message);
      return 1;
    }
  g_child_watch_add (data.pid, on_child_exited, &data);

  g_main_loop_run (data.loop);

  if (!data.exited)
    kill (data.pid, SIGTERM);

  return 0;
}
Exemple #28
0
static gboolean
pk_alpm_initialize_monitor (PkBackend *backend, GError **error)
{
	PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend);

	_cleanup_free_ gchar * path = NULL;
	_cleanup_object_unref_ GFile *directory = NULL;

	path = g_strconcat (alpm_option_get_dbpath (priv->alpm) ,"/local", NULL);
	directory = g_file_new_for_path (path);

	priv->monitor = g_file_monitor_directory (directory, 0, NULL, error);
	if (priv->monitor == NULL)
		return FALSE;

	g_signal_connect (priv->monitor, "changed",
		G_CALLBACK (pk_backend_context_invalidate_cb), backend);
	return TRUE;
}
Exemple #29
0
static void
udisks_linux_provider_init (UDisksLinuxProvider *provider)
{
  const gchar *subsystems[] = {"block", "iscsi_connection", "scsi", NULL};
  GFile *file;
  GError *error = NULL;

  /* get ourselves an udev client */
  provider->gudev_client = g_udev_client_new (subsystems);

  g_signal_connect (provider->gudev_client,
                    "uevent",
                    G_CALLBACK (on_uevent),
                    provider);

  provider->probe_request_queue = g_async_queue_new ();
  provider->probe_request_thread = g_thread_new ("probing-thread",
                                                 probe_request_thread_func,
                                                 provider);

  file = g_file_new_for_path (PACKAGE_SYSCONF_DIR "/udisks2");
  provider->etc_udisks2_dir_monitor = g_file_monitor_directory (file,
                                                                G_FILE_MONITOR_NONE,
                                                                NULL,
                                                                &error);
  if (provider->etc_udisks2_dir_monitor != NULL)
    {
      g_signal_connect (provider->etc_udisks2_dir_monitor,
                        "changed",
                        G_CALLBACK (on_etc_udisks2_dir_monitor_changed),
                        provider);
    }
  else
    {
      udisks_warning ("Error monitoring directory %s: %s (%s, %d)",
                      PACKAGE_SYSCONF_DIR "/udisks2",
                      error->message, g_quark_to_string (error->domain), error->code);
      g_clear_error (&error);
    }
  g_object_unref (file);

}
Exemple #30
0
static gboolean
ide_git_vcs_load_monitor_locked (IdeGitVcs  *self,
                                 GError    **error)
{
  gboolean ret = TRUE;

  g_assert (IDE_IS_GIT_VCS (self));

  if (self->monitor == NULL)
    {
      g_autoptr(GFile) location = NULL;
      g_autoptr(GFileMonitor) monitor = NULL;
      GError *local_error = NULL;

      location = ggit_repository_get_location (self->repository);

      monitor = g_file_monitor_directory (location,
                                          G_FILE_MONITOR_NONE,
                                          NULL,
                                          &local_error);

      if (monitor == NULL)
        {
          g_warning ("Failed to establish git monitor: %s", local_error->message);
          g_propagate_error (error, local_error);
          ret = FALSE;
        }
      else
        {
          IDE_TRACE_MSG ("Git index monitor registered.");
          g_signal_connect_object (monitor,
                                   "changed",
                                   G_CALLBACK (ide_git_vcs__monitor_changed_cb),
                                   self,
                                   G_CONNECT_SWAPPED);
          self->monitor = g_steal_pointer (&monitor);
        }
    }

  return ret;
}