55 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
56 static pthread_cond_t
cond = PTHREAD_COND_INITIALIZER;
73 GDK_WINDOW_TYPE_HINT_DIALOG);
74 gtk_window_set_title ((GtkWindow *)
status_window,
_(
"Searching ..."));
76 gtk_container_set_border_width ((GtkContainer *)
status_window, 6);
78 GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
85 PANGO_ELLIPSIZE_MIDDLE);
99 pthread_mutex_lock (&
mutex);
102 snprintf (scratch,
sizeof scratch, dngettext (PACKAGE,
"%d file found",
107 printf (
"Searching, %s ...\r", scratch);
116 pthread_mutex_unlock (&
mutex);
122 pthread_mutex_lock (&
mutex);
130 pthread_mutex_unlock (&
mutex);
150 for (
int i = 0; i < count; i ++)
159 for (
int i = 0; i < count; i ++)
221 g_return_if_fail (filename);
222 if (filter && ! filter (filename, user))
230 if (! tuple && ! decoder)
233 if (validate && ! decoder)
248 for (
int sub = 0; sub < n_subtunes; sub ++)
250 char * subname =
str_printf (
"%s?%d", filename,
268 g_return_if_fail (filename);
269 if (filter && ! filter (filename, user))
284 GList * files =
NULL;
285 DIR * folder = opendir (unix_name);
289 struct dirent *
entry;
290 while ((entry = readdir (folder)))
292 if (entry->d_name[0] !=
'.')
293 files = g_list_prepend (files, g_build_filename (unix_name, entry->d_name,
NULL));
303 if (lstat (files->data, & info) < 0)
305 if (stat (files->data, & info) < 0)
309 if (S_ISREG (info.st_mode))
318 else if (S_ISDIR (info.st_mode))
329 g_free (files->data);
330 files = g_list_delete_link (files, files);
341 g_return_if_fail (filename);
342 if (filter && ! filter (filename, user))
352 if (!
playlist_load (filename, & title, & filenames, & tuples))
359 for (
int i = 0; i < count; i ++)
361 NULL, NULL, filter, user, result,
FALSE);
373 g_return_if_fail (filename);
387 pthread_mutex_lock (&
mutex);
399 if (result->
at < 0 || result->
at > count)
429 pthread_mutex_unlock (&
mutex);
437 pthread_mutex_lock (&
mutex);
451 pthread_mutex_unlock (&
mutex);
460 for (
int i = 0; i < count; i ++)
473 pthread_mutex_lock (&
mutex);
482 pthread_mutex_unlock (&
mutex);
488 pthread_mutex_lock (&
mutex);
491 pthread_mutex_unlock (&
mutex);
496 pthread_mutex_lock (&
mutex);
498 pthread_cond_broadcast (&
cond);
499 pthread_mutex_unlock (&
mutex);
538 g_return_if_fail (playlist_id >= 0);
542 pthread_mutex_lock (&
mutex);
544 pthread_cond_broadcast (&
cond);
545 pthread_mutex_unlock (&
mutex);
550 pthread_mutex_lock (&
mutex);
556 for (GList * node =
add_tasks; node; node = node->next)
558 if (((
AddTask *) node->data)->playlist_id == playlist_id)
565 for (GList * node =
add_results; node; node = node->next)
567 if (((
AddResult *) node->data)->playlist_id == playlist_id)
577 pthread_mutex_unlock (&
mutex);
581 pthread_mutex_unlock (&
mutex);