56 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
57 static pthread_cond_t
cond = PTHREAD_COND_INITIALIZER;
74 GDK_WINDOW_TYPE_HINT_DIALOG);
75 gtk_window_set_title ((GtkWindow *)
status_window,
_(
"Searching ..."));
77 gtk_container_set_border_width ((GtkContainer *)
status_window, 6);
79 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
86 PANGO_ELLIPSIZE_MIDDLE);
100 pthread_mutex_lock (&
mutex);
103 snprintf (scratch,
sizeof scratch, dngettext (PACKAGE,
"%d file found",
108 printf (
"Searching, %s ...\r", scratch);
117 pthread_mutex_unlock (&
mutex);
123 pthread_mutex_lock (&
mutex);
131 pthread_mutex_unlock (&
mutex);
151 for (
int i = 0; i < count; i ++)
160 for (
int i = 0; i < count; i ++)
222 g_return_if_fail (filename);
223 if (filter && ! filter (filename, user))
231 if (! tuple && ! decoder)
234 if (validate && ! decoder)
249 for (
int sub = 0; sub < n_subtunes; sub ++)
251 char * subname =
str_printf (
"%s?%d", filename,
269 g_return_if_fail (filename);
270 if (filter && ! filter (filename, user))
285 if (unix_name[strlen (unix_name) - 1] ==
'/')
286 unix_name[strlen (unix_name) - 1] = 0;
288 GList * files =
NULL;
289 DIR * folder = opendir (unix_name);
293 struct dirent *
entry;
294 while ((entry = readdir (folder)))
296 if (entry->d_name[0] !=
'.')
297 files = g_list_prepend (files, g_strdup_printf (
"%s"
298 G_DIR_SEPARATOR_S
"%s", unix_name, entry->d_name));
307 if (stat (files->data, & info) < 0)
310 if (S_ISREG (info.st_mode))
319 else if (S_ISDIR (info.st_mode))
330 g_free (files->data);
331 files = g_list_delete_link (files, files);
342 g_return_if_fail (filename);
343 if (filter && ! filter (filename, user))
353 if (!
playlist_load (filename, & title, & filenames, & tuples))
360 for (
int i = 0; i < count; i ++)
362 NULL, NULL, filter, user, result,
FALSE);
374 g_return_if_fail (filename);
388 pthread_mutex_lock (&
mutex);
400 if (result->
at < 0 || result->
at > count)
433 pthread_mutex_unlock (&
mutex);
441 pthread_mutex_lock (&
mutex);
455 pthread_mutex_unlock (&
mutex);
464 for (
int i = 0; i < count; i ++)
477 pthread_mutex_lock (&
mutex);
486 pthread_mutex_unlock (&
mutex);
492 pthread_mutex_lock (&
mutex);
495 pthread_mutex_unlock (&
mutex);
500 pthread_mutex_lock (&
mutex);
502 pthread_cond_broadcast (&
cond);
503 pthread_mutex_unlock (&
mutex);
537 g_return_if_fail (playlist_id >= 0);
541 pthread_mutex_lock (&
mutex);
543 pthread_cond_broadcast (&
cond);
544 pthread_mutex_unlock (&
mutex);
550 g_return_val_if_fail (playlist_id >= 0,
FALSE);
552 pthread_mutex_lock (&
mutex);
554 for (GList * node =
add_tasks; node; node = node->next)
556 if (((
AddTask *) node->data)->playlist_id == playlist_id)
563 for (GList * node =
add_results; node; node = node->next)
565 if (((
AddResult *) node->data)->playlist_id == playlist_id)
569 pthread_mutex_unlock (&
mutex);
573 pthread_mutex_unlock (&
mutex);