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