static char *
get_regexp_name (const char *regexp, const char *path, gboolean dir)
{
	MateVFSResult result;
	GList *list, *node;
	MateVFSFileInfo *info;
	char *res = NULL;

	result = mate_vfs_directory_list_load (
		&list, path, MATE_VFS_FILE_INFO_DEFAULT);

	if (show_if_error (result, "open directory ", path))
		return NULL;

	for (node = list; node != NULL; node = node->next) {
		info = node->data;

		if (simple_regexp (regexp, info->name)) {
			if (info->valid_fields & MATE_VFS_FILE_INFO_FIELDS_TYPE) {
				if ((dir  && info->type == MATE_VFS_FILE_TYPE_DIRECTORY) ||
				    (!dir && info->type != MATE_VFS_FILE_TYPE_DIRECTORY)) {
					res = g_strdup (info->name);
					break;
				}
			} else {
				fprintf (vfserr, "Can't cope with no type data");
				res = g_strdup (info->name);
				break;
			}
		}
	}
	mate_vfs_file_info_list_free (list);

	return res;
}
static gboolean
validate_path (const char *path)
{
	MateVFSResult result;
	GList *list;

	result = mate_vfs_directory_list_load (
		&list, path, MATE_VFS_FILE_INFO_DEFAULT);

	if (show_if_error (result, "open directory ", path)) {
		return FALSE;
	}

	mate_vfs_file_info_list_free (list);

	return TRUE;
}
Example #3
0
int
main (int argc, char **argv)
{
	GList *list;
	MateVFSResult result;
	GTimer *timer;
	gchar *text_uri;

	GOptionContext *ctx = NULL;
	GError *error = NULL;

	ctx = g_option_context_new("test-directory");
	g_option_context_add_main_entries(ctx, options, NULL);

	if (!g_option_context_parse(ctx, &argc, &argv, &error)) {
		g_printerr("main: %s\n", error->message);

		g_error_free(error);
		g_option_context_free(ctx);
		return 1;
	}

	g_option_context_free(ctx);

	if (argc != 2 || argv[1] == NULL) {
		g_printerr("Usage: %s [<options>] <uri>\n", argv[0]);
		return 1;
	}

	text_uri = g_strdup(argv[1]);

	mate_vfs_init ();

	printf ("Loading directory...");
	fflush (stdout);

	if (measure_speed) {
		timer = g_timer_new ();
		g_timer_start (timer);
	} else {
		timer = NULL;
	}

	/* Load with without requesting any metadata.  */
	result = mate_vfs_directory_list_load
		(&list, text_uri,
		 (MATE_VFS_FILE_INFO_GET_MIME_TYPE
		  | MATE_VFS_FILE_INFO_FORCE_FAST_MIME_TYPE
		  | MATE_VFS_FILE_INFO_FOLLOW_LINKS));

	if (result == MATE_VFS_OK && measure_speed) {
		gdouble elapsed_seconds;
		guint num_entries;

		g_timer_stop (timer);
		elapsed_seconds = g_timer_elapsed (timer, NULL);
		num_entries = g_list_length (list);
		printf ("\n%.5f seconds for %d unsorted entries, %.5f entries/sec.\n",
			elapsed_seconds, num_entries,
			(double) num_entries / elapsed_seconds);
	}

	if (!measure_speed) {
		printf ("Ok\n");

		show_result (result, "load_directory", text_uri);

		printf ("Listing for `%s':\n", text_uri);
		print_list (list);
	}

	printf ("Destroying.\n");
	mate_vfs_file_info_list_free (list);

	printf ("Done.\n");

	g_free (text_uri);

	return 0;
}
static void
do_ls (void)
{
	MateVFSResult result;
	GList *list, *node;
	MateVFSFileInfo *info;
	const char *path;

	if (!arg_data [arg_cur])
		path = cur_dir;
	else
		path = arg_data [arg_cur++];

	result = mate_vfs_directory_list_load
		(&list, path,
		 MATE_VFS_FILE_INFO_DEFAULT |
		 MATE_VFS_FILE_INFO_GET_MIME_TYPE);
	if (show_if_error (result, "open directory ", cur_dir))
		return;

	for (node = list; node != NULL; node = node->next) {
		char prechar = '\0', postchar = '\0';
		info = node->data;

		if (info->valid_fields & MATE_VFS_FILE_INFO_FIELDS_TYPE) {
			switch (info->type) {
			case MATE_VFS_FILE_TYPE_DIRECTORY:
				prechar = '[';
				postchar = ']';
				break;
			case MATE_VFS_FILE_TYPE_UNKNOWN:
				prechar = '?';
				break;
			case MATE_VFS_FILE_TYPE_FIFO:
				prechar = '|';
				break;
			case MATE_VFS_FILE_TYPE_SOCKET:
				prechar = '-';
				break;
			case MATE_VFS_FILE_TYPE_CHARACTER_DEVICE:
			case MATE_VFS_FILE_TYPE_BLOCK_DEVICE:
				prechar = '@';
				break;
			case MATE_VFS_FILE_TYPE_SYMBOLIC_LINK:
				prechar = '#';
				break;
			default:
				prechar = '\0';
				break;
			}
			if (!postchar)
				postchar = prechar;
		}
		printf ("%c%s%c", prechar, info->name, postchar);

		if (strlen (info->name) < 40) {
			int i, pad;

			pad = 40 - strlen (info->name) -
				(prechar?1:0) - (postchar?1:0);

			for (i = 0; i < pad; i++)
				printf (" ");
		}
		if (info->valid_fields & MATE_VFS_FILE_INFO_FIELDS_SIZE) {
			long i = info->size;
			printf (" : %ld bytes", i);
		}

		if (info->valid_fields & MATE_VFS_FILE_INFO_FIELDS_MIME_TYPE) {
			printf (", type '%s'", info->mime_type);
		}

		printf ("\n");
	}
	
	mate_vfs_file_info_list_free (list);
}