/* 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 } */