All pastes #635123 Raw Edit

Anonymous

public text v1 · immutable
#635123 ·published 2007-07-26 21:19 UTC
rendered paste body
/* Thumbnail async spawns 
void watch_thumbnail (GPid pid, gint status, gpointer data)
{
	GError *error = NULL;
	widgets_t *lookup = get_lookup_t();
	playlist_t *playlist = get_playlist_t();
	GtkTreeIter iter = playlist->thumb_iter;
	GPid this_pid; 	gchar **argv;	gint nargs;
	char *cmd = (char *) malloc(sizeof(char)*256);
	char *filename = (char *) malloc(sizeof(char)*128);
	char *dest = (char *) malloc(sizeof(char)*128);
	char *src = (char *) malloc(sizeof(char)*128);
	
	pid = NULL;
	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(lookup->treeview));
	gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, FILENAME_COLUMN, &filename, -1);
	dest = g_build_filename(THUMB_DIR, filename, NULL);
	src = g_build_filename(PlayList->current_dir, filename, NULL);
	g_print("%s\n",THUMB_DIR);
	g_print("found - filename: %s\nsrc: %s, \ndest: %s",filename, src, dest);

	if(g_file_test(dest, G_FILE_TEST_EXISTS)) 
	{	
		GdkPixbuf *thumb = gdk_pixbuf_new_from_file(dest, &error);
		if (error) {
			g_warning ("Could not pixbuf icon from %s\n", filename);
			g_error_free(error); error = NULL;
		}
		gtk_list_store_set(GTK_LIST_STORE(model), &iter, ICON_COLUMN, thumb, -1);
	}
	
	
	if(gtk_tree_model_iter_next (GTK_TREE_MODEL(model), &iter) == FALSE) {
		g_free(src); g_free(cmd); g_free(filename); g_free(dest);
		g_print("Filled icons in\n");
		return;	
	} else {
		playlist->thumb_iter = iter;
		if(g_file_test(dest, G_FILE_TEST_EXISTS)) 
		{
			if(DEBUG_STATE) g_print("Thumbnail EXISTS\n");
			watch_thumbnail((int)NULL, 0, NULL);
		} else {
			sprintf(cmd,"/usr/bin/totem-video-thumbnailer -s 54x45 %s %s", src, dest);
			g_shell_parse_argv(cmd, &nargs, &argv, &error);
			g_spawn_async (NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &this_pid, &error);
			g_strfreev(argv);
			if (error) {
				g_warning ("Couldnt execute the thumbnailer: %s\n", error->message);
				g_error_free(error); error = NULL; return;
			}
			g_child_watch_add(this_pid, watch_thumbnail, NULL);
		}
	} 

	lookup->playlist->thumb_iter = iter;
	g_free(src); g_free(cmd); g_free(filename); g_free(dest);

}
gboolean do_thumbnails (gpointer data) 
{
	if (!g_file_test("/usr/bin/totem-video-thumbnailer", G_FILE_TEST_EXISTS)) {
		g_warning("Missing out on features...\nInstall the totem-pkg to take full advantage\n* hint * Looking for totem-video-thumbnailer in /usr/bin *hint*\nIn addition gst-plugin-bad and gst-plugin-ugly are needed for windowsmedia thumbnailing.\n");
		return FALSE;
	}
	widgets_t *lookup = get_lookup_t();
	playlist_t *playlist = get_playlist_t();
	char *src, *dest, *filename, *cmd;
	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(lookup->treeview));
	GError *error = NULL;
	GPid this_pid;
	gchar **argv;
	gint nargs;

	GtkTreeIter iter = playlist->thumb_iter;
	
	filename = (char *) malloc (sizeof(char)*128);
	cmd = (char *) malloc(sizeof(char)*256);
	memset(filename, '\0', 128); memset(cmd, '\0', 256);
	

	gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, FILENAME_COLUMN, &filename, -1);
	dest = g_build_filename(THUMB_DIR, filename, NULL);
	src = g_build_filename(PlayList->current_dir, filename, NULL);

	if(DEBUG_STATE) g_print("TESTING: %s\n", dest);
	if(g_file_test(dest, G_FILE_TEST_EXISTS)) 
	{
		 Thumbnail exists, no fuss about it :)
		if(DEBUG_STATE) g_print("Thumbnail EXISTS\n");
		watch_thumbnail((int)NULL, 0, NULL);
		
	} else {

		if(DEBUG_STATE) g_print("NEW ICON is needed\n");
		 Building argument vector 
		sprintf(cmd,"/usr/bin/totem-video-thumbnailer -s 54x45 \"%s/%s\" \"%s\" >>dev/null", 
			playlist->current_dir, filename, dest);
		if(DEBUG_STATE) g_print("EXECuting: %s\n", cmd);
		 Executing thumbnailer sequentially 
		g_shell_parse_argv(cmd, &nargs, &argv, &error);
		g_spawn_async (NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &this_pid, &error);
		g_strfreev(argv);
		if (error) {
			g_warning ("Couldnt execute the thumbnailer: %s\n", error->message);
			g_error_free(error); error = NULL; return FALSE;
		}
		 Waiting for icon to be in place, then adding to tree 
		g_child_watch_add(this_pid, watch_thumbnail,NULL);
	}
	playlist->thumb_iter = iter;
g_free(src); g_free(cmd); g_free(filename);
return TRUE; // continue idle task
}
*/