static bool
ply_progress_animation_add_frames (ply_progress_animation_t *progress_animation)
{
  struct dirent **entries;
  int number_of_entries;
  int i;
  bool load_finished;

  entries = NULL;

  number_of_entries = scandir (progress_animation->image_dir, &entries, NULL, versionsort);

  if (number_of_entries < 0)
    return false;

  load_finished = false;
  for (i = 0; i < number_of_entries; i++)
    {
      if (strncmp (entries[i]->d_name,
                   progress_animation->frames_prefix,
                   strlen (progress_animation->frames_prefix)) == 0
          && (strlen (entries[i]->d_name) > 4)
          && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0)
        {
          char *filename;

          filename = NULL;
          asprintf (&filename, "%s/%s", progress_animation->image_dir, entries[i]->d_name);

          if (!ply_progress_animation_add_frame (progress_animation, filename))
            goto out;

          free (filename);
        }

      free (entries[i]);
      entries[i] = NULL;
    }
  load_finished = true;

out:
  if (!load_finished)
    {
      ply_progress_animation_remove_frames (progress_animation);

      while (entries[i] != NULL)
        {
          free (entries[i]);
          i++;
        }
    }
  free (entries);

  return load_finished;
}
Exemplo n.º 2
0
static bool
ply_progress_animation_add_frames (ply_progress_animation_t *progress_animation)
{
        struct dirent **entries;
        int number_of_entries;
        int number_of_frames;
        int i;
        bool load_finished;

        entries = NULL;

        number_of_entries = scandir (progress_animation->image_dir, &entries, NULL, versionsort);

        if (number_of_entries < 0)
                return false;

        load_finished = false;
        for (i = 0; i < number_of_entries; i++) {
                if (strncmp (entries[i]->d_name,
                             progress_animation->frames_prefix,
                             strlen (progress_animation->frames_prefix)) == 0
                    && (strlen (entries[i]->d_name) > 4)
                    && strcmp (entries[i]->d_name + strlen (entries[i]->d_name) - 4, ".png") == 0) {
                        char *filename;
                        bool r;

                        filename = NULL;
                        asprintf (&filename, "%s/%s", progress_animation->image_dir, entries[i]->d_name);

                        r = ply_progress_animation_add_frame (progress_animation, filename);
                        free (filename);
                        if (!r)
                                goto out;
                }

                free (entries[i]);
                entries[i] = NULL;
        }

        number_of_frames = ply_array_get_size (progress_animation->frames);
        if (number_of_frames == 0) {
                ply_trace ("could not find any progress animation frames");
                load_finished = false;
        } else {
                ply_trace ("found %d progress animation frames", number_of_frames);
                load_finished = true;
        }

out:
        if (!load_finished) {
                ply_progress_animation_remove_frames (progress_animation);

                while (i < number_of_entries) {
                        free (entries[i]);
                        i++;
                }
        }
        free (entries);

        return load_finished;
}