static void parse_progress_line (FrArchive *archive, const char *prefix, const char *message_format, const char *line) { int prefix_len; prefix_len = strlen (prefix); if (strncmp (line, prefix, prefix_len) == 0) { if (fr_archive_progress_get_total_files (archive) > 1) { fr_archive_progress (archive, fr_archive_progress_inc_completed_files (archive, 1)); } else { char filename[4196]; char *msg; strcpy (filename, line + prefix_len); msg = g_strdup_printf (message_format, filename, NULL); fr_archive_message (archive, msg); g_free (msg); } } }
static void process_line__extract (char *line, gpointer data) { FrArchive *archive = FR_ARCHIVE (data); if (fr_archive_progress_get_total_files (archive) > 0) parse_progress_line (archive, "Extracting ", _("Extracting \"%s\""), line); }
static void process_line__extract (char *line, gpointer data) { FrCommand *comm = FR_COMMAND (data); FrArchive *archive = FR_ARCHIVE (comm); FrCommandUnarchiver *unar_comm = FR_COMMAND_UNARCHIVER (comm); if (line == NULL) return; unar_comm->n_line++; /* the first line is the name of the archive */ if (unar_comm->n_line == 1) return; if (fr_archive_progress_get_total_files (archive) > 1) fr_archive_progress (archive, fr_archive_progress_inc_completed_files (archive, 1)); else fr_archive_message (archive, line); }
static void process_line__add (char *line, gpointer data) { FrCommand *command = FR_COMMAND (data); FrArchive *archive = FR_ARCHIVE (data); if ((archive->volume_size > 0) && (strncmp (line, "Creating archive ", 17) == 0)) { char *volume_filename; GFile *volume_file; volume_filename = g_strconcat (command->filename, ".001", NULL); volume_file = g_file_new_for_path (volume_filename); fr_archive_set_multi_volume (archive, volume_file); g_object_unref (volume_file); g_free (volume_filename); } if (fr_archive_progress_get_total_files (archive) > 0) parse_progress_line (archive, "Compressing ", _("Adding \"%s\""), line); }
static void process_line__generic (char *line, gpointer data, char *message_format) { FrCommand *comm = FR_COMMAND (data); FrArchive *archive = FR_ARCHIVE (comm); if (line == NULL) return; if (line[strlen (line) - 1] == '/') /* ignore directories */ return; if (fr_archive_progress_get_total_files (archive) > 1) { fr_archive_progress (archive, fr_archive_progress_inc_completed_files (archive, 1)); } else { char *msg = g_strdup_printf (message_format, _g_path_get_basename (line), NULL); fr_archive_message (archive, msg); g_free (msg); } }