[gnome-autoar/wip/razvan/extract-refactor2: 7/8] AutoarExtract: restrict object initalization to use GFile
- From: Răzvan-Mihai Chițu <razvanchitu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-autoar/wip/razvan/extract-refactor2: 7/8] AutoarExtract: restrict object initalization to use GFile
- Date: Tue, 9 Aug 2016 08:08:09 +0000 (UTC)
commit 5529359dc5c1e57c2c19622181aca88c02fa0a7d
Author: Razvan Chitu <razvan ch95 gmail com>
Date: Sun Aug 7 16:18:16 2016 +0300
AutoarExtract: restrict object initalization to use GFile
In conformity with the GLib API, change AutoarExtract API to work with GFiles
instead of strings.
gnome-autoar/autoar-extract.c | 196 ++++++-----------------------------------
gnome-autoar/autoar-extract.h | 5 +-
tests/test-extract-unit.c | 18 ++--
tests/test-extract.c | 7 ++-
4 files changed, 42 insertions(+), 184 deletions(-)
---
diff --git a/gnome-autoar/autoar-extract.c b/gnome-autoar/autoar-extract.c
index 7fdba09..619915a 100644
--- a/gnome-autoar/autoar-extract.c
+++ b/gnome-autoar/autoar-extract.c
@@ -108,13 +108,11 @@ typedef struct _GFileAndInfo GFileAndInfo;
struct _AutoarExtractPrivate
{
- /* Variables from user input */
- char *source;
- char *output;
-
GFile *source_file;
GFile *output_file;
+ char *source_basename;
+
int output_is_dest : 1;
AutoarPref *arpref;
@@ -175,9 +173,7 @@ enum
enum
{
PROP_0,
- PROP_SOURCE, /* Only used to display messages */
PROP_SOURCE_FILE,
- PROP_OUTPUT, /* Only used to display messages */
PROP_OUTPUT_FILE,
PROP_SIZE,
PROP_COMPLETED_SIZE,
@@ -202,15 +198,9 @@ autoar_extract_get_property (GObject *object,
priv = arextract->priv;
switch (property_id) {
- case PROP_SOURCE:
- g_value_set_string (value, priv->source);
- break;
case PROP_SOURCE_FILE:
g_value_set_object (value, priv->source_file);
break;
- case PROP_OUTPUT:
- g_value_set_string (value, priv->output);
- break;
case PROP_OUTPUT_FILE:
g_value_set_object (value, priv->output_file);
break;
@@ -251,18 +241,10 @@ autoar_extract_set_property (GObject *object,
priv = arextract->priv;
switch (property_id) {
- case PROP_SOURCE:
- g_free (priv->source);
- priv->source = g_value_dup_string (value);
- break;
case PROP_SOURCE_FILE:
g_clear_object (&(priv->source_file));
priv->source_file = g_object_ref (g_value_get_object (value));
break;
- case PROP_OUTPUT:
- g_free (priv->output);
- priv->output = g_value_dup_string (value);
- break;
case PROP_OUTPUT_FILE:
g_clear_object (&(priv->output_file));
priv->output_file = g_object_ref (g_value_get_object (value));
@@ -280,22 +262,6 @@ autoar_extract_set_property (GObject *object,
}
/**
- * autoar_extract_get_source:
- * @arextract: an #AutoarExtract
- *
- * Gets the source file that will be extracted for this object. It may be a
- * filename or URI.
- *
- * Returns: (transfer none): a string
- **/
-char*
-autoar_extract_get_source (AutoarExtract *arextract)
-{
- g_return_val_if_fail (AUTOAR_IS_EXTRACT (arextract), NULL);
- return arextract->priv->source;
-}
-
-/**
* autoar_extract_get_source_file:
* @arextract: an #AutoarExtract
*
@@ -312,23 +278,6 @@ autoar_extract_get_source_file (AutoarExtract *arextract)
}
/**
- * autoar_extract_get_output:
- * @arextract: an #AutoarExtract
- *
- * If #AutoarExtract:output_is_dest is %FALSE, gets the directory which contains
- * the extracted file or directory. Otherwise, get the filename of the extracted
- * file or directory itself. See autoar_extract_set_output_is_dest().
- *
- * Returns: (transfer none): a filename
- **/
-char*
-autoar_extract_get_output (AutoarExtract *arextract)
-{
- g_return_val_if_fail (AUTOAR_IS_EXTRACT (arextract), NULL);
- return arextract->priv->output;
-}
-
-/**
* autoar_extract_get_output_file:
* @arextract: an #AutoarExtract
*
@@ -543,12 +492,6 @@ autoar_extract_finalize (GObject *object)
g_debug ("AutoarExtract: finalize");
- g_free (priv->source);
- priv->source = NULL;
-
- g_free (priv->output);
- priv->output = NULL;
-
g_free (priv->buffer);
priv->buffer = NULL;
@@ -1299,15 +1242,6 @@ autoar_extract_class_init (AutoarExtractClass *klass)
object_class->dispose = autoar_extract_dispose;
object_class->finalize = autoar_extract_finalize;
- g_object_class_install_property (object_class, PROP_SOURCE,
- g_param_spec_string ("source",
- "Source archive",
- "The archive file to be extracted",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (object_class, PROP_SOURCE_FILE,
g_param_spec_object ("source-file",
"Source archive GFile",
@@ -1317,15 +1251,6 @@ autoar_extract_class_init (AutoarExtractClass *klass)
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class, PROP_OUTPUT,
- g_param_spec_string ("output",
- "Output directory",
- "Output directory of extracted archive",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
g_object_class_install_property (object_class, PROP_OUTPUT_FILE,
g_param_spec_object ("output-file",
"Output directory GFile",
@@ -1561,89 +1486,8 @@ autoar_extract_init (AutoarExtract *arextract)
priv->use_raw_format = FALSE;
}
-static AutoarExtract*
-autoar_extract_new_full (const char *source,
- GFile *source_file,
- const char *output,
- GFile *output_file,
- AutoarPref *arpref,
- const void *buffer,
- gsize buffer_size,
- const char *suggested_destname)
-{
- AutoarExtract *arextract;
- char *gen_source, *gen_output;
- GFile *gen_source_file, *gen_output_file;
- g_autofree char *source_basename;
-
- gen_source = NULL;
- gen_source_file = NULL;
- gen_output = NULL;
- gen_output_file = NULL;
-
- if (source == NULL)
- gen_source = autoar_common_g_file_get_name (source_file);
- if (source_file == NULL)
- gen_source_file = g_file_new_for_commandline_arg (source);
-
- if (output == NULL)
- gen_output = autoar_common_g_file_get_name (output_file);
- if (output_file == NULL)
- gen_output_file = g_file_new_for_commandline_arg (output);
-
- arextract =
- g_object_new (AUTOAR_TYPE_EXTRACT,
- "source", source != NULL ? source : gen_source,
- "source-file", source_file != NULL ? source_file : gen_source_file,
- "output", output != NULL ? output : gen_output,
- "output-file", output_file != NULL ? output_file : gen_output_file,
- NULL);
-
- arextract->priv->arpref = g_object_ref (arpref);
-
- source_basename = g_file_get_basename (arextract->priv->source_file);
- arextract->priv->suggested_destname =
- autoar_common_get_basename_remove_extension (source_basename);
-
- g_free (gen_source);
- g_free (gen_output);
-
- if (gen_source_file != NULL)
- g_object_unref (gen_source_file);
- if (gen_output_file != NULL)
- g_object_unref (gen_output_file);
-
- return arextract;
-}
-
-
/**
* autoar_extract_new:
- * @source: source archive
- * @output: output directory of extracted file or directory, or the file name
- * of the extracted file or directory itself if you set
- * #AutoarExtract:output-is-dest on the returned object
- * @arpref: an #AutoarPref object
- *
- * Extract a new #AutoarExtract object.
- *
- * Returns: (transfer full): a new #AutoarExtract object
- **/
-AutoarExtract*
-autoar_extract_new (const char *source,
- const char *output,
- AutoarPref *arpref)
-{
- g_return_val_if_fail (source != NULL, NULL);
- g_return_val_if_fail (output != NULL, NULL);
-
- return autoar_extract_new_full (source, NULL, output, NULL,
- arpref,
- NULL, 0, NULL);
-}
-
-/**
- * autoar_extract_new_file:
* @source_file: source archive
* @output_file: output directory of extracted file or directory, or the
* file name of the extracted file or directory itself if you set
@@ -1655,16 +1499,28 @@ autoar_extract_new (const char *source,
* Returns: (transfer full): a new #AutoarExtract object
**/
AutoarExtract*
-autoar_extract_new_file (GFile *source_file,
- GFile *output_file,
- AutoarPref *arpref)
+autoar_extract_new (GFile *source_file,
+ GFile *output_file,
+ AutoarPref *arpref)
{
+ AutoarExtract *arextract;
+
g_return_val_if_fail (source_file != NULL, NULL);
g_return_val_if_fail (output_file != NULL, NULL);
- return autoar_extract_new_full (NULL, source_file, NULL, output_file,
- arpref,
- NULL, 0, NULL);
+ arextract = g_object_new (AUTOAR_TYPE_EXTRACT,
+ "source-file", source_file,
+ "output-file", output_file,
+ NULL);
+
+ arextract->priv->arpref = g_object_ref (arpref);
+
+ arextract->priv->source_basename =
+ g_file_get_basename (arextract->priv->source_file);
+ arextract->priv->suggested_destname =
+ autoar_common_get_basename_remove_extension (arextract->priv->source_basename);
+
+ return arextract;
}
static void
@@ -1691,7 +1547,7 @@ autoar_extract_step_scan_toplevel (AutoarExtract *arextract)
r = libarchive_create_read_object (TRUE, arextract, &a);
if (r != ARCHIVE_OK) {
if (priv->error == NULL)
- priv->error = autoar_common_g_error_new_a (a, priv->source);
+ priv->error = autoar_common_g_error_new_a (a, priv->source_basename);
return;
} else if (archive_filter_count (a) <= 1){
/* If we only use raw format and filter count is one, libarchive will
@@ -1699,7 +1555,7 @@ autoar_extract_step_scan_toplevel (AutoarExtract *arextract)
* want this thing to happen because it does unnecesssary copying. */
if (priv->error == NULL)
priv->error = g_error_new (AUTOAR_EXTRACT_ERROR, NOT_AN_ARCHIVE_ERRNO,
- "\'%s\': %s", priv->source, "not an archive");
+ "\'%s\': %s", priv->source_basename, "not an archive");
return;
}
priv->use_raw_format = TRUE;
@@ -1727,7 +1583,7 @@ autoar_extract_step_scan_toplevel (AutoarExtract *arextract)
if (priv->files_list == NULL) {
if (priv->error == NULL) {
priv->error = g_error_new (AUTOAR_EXTRACT_ERROR, EMPTY_ARCHIVE_ERRNO,
- "\'%s\': %s", priv->source, "empty archive");
+ "\'%s\': %s", priv->source_basename, "empty archive");
}
archive_read_free (a);
return;
@@ -1735,7 +1591,7 @@ autoar_extract_step_scan_toplevel (AutoarExtract *arextract)
if (r != ARCHIVE_EOF) {
if (priv->error == NULL) {
- priv->error = autoar_common_g_error_new_a (a, priv->source);
+ priv->error = autoar_common_g_error_new_a (a, priv->source_basename);
}
archive_read_free (a);
return;
@@ -1901,7 +1757,7 @@ autoar_extract_step_extract (AutoarExtract *arextract) {
r = libarchive_create_read_object (priv->use_raw_format, arextract, &a);
if (r != ARCHIVE_OK) {
if (priv->error == NULL) {
- priv->error = autoar_common_g_error_new_a (a, priv->source);
+ priv->error = autoar_common_g_error_new_a (a, priv->source_basename);
}
archive_read_free (a);
return;
@@ -1974,7 +1830,7 @@ autoar_extract_step_extract (AutoarExtract *arextract) {
if (r != ARCHIVE_EOF) {
if (priv->error == NULL) {
- priv->error = autoar_common_g_error_new_a (a, priv->source);
+ priv->error = autoar_common_g_error_new_a (a, priv->source_basename);
}
archive_read_free (a);
return;
diff --git a/gnome-autoar/autoar-extract.h b/gnome-autoar/autoar-extract.h
index 651f9fb..7d677f1 100644
--- a/gnome-autoar/autoar-extract.h
+++ b/gnome-autoar/autoar-extract.h
@@ -69,10 +69,7 @@ GQuark autoar_extract_quark (void);
GType autoar_extract_get_type (void) G_GNUC_CONST;
-AutoarExtract *autoar_extract_new (const char *source,
- const char *output,
- AutoarPref *arpref);
-AutoarExtract *autoar_extract_new_file (GFile *source_file,
+AutoarExtract *autoar_extract_new (GFile *source_file,
GFile *output_file,
AutoarPref *arpref);
diff --git a/tests/test-extract-unit.c b/tests/test-extract-unit.c
index be3e3ef..8d06f82 100644
--- a/tests/test-extract-unit.c
+++ b/tests/test-extract-unit.c
@@ -500,7 +500,7 @@ test_one_file_same_name (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -546,7 +546,7 @@ test_one_file_different_name (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -597,7 +597,7 @@ test_multiple_files_same_name (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -651,7 +651,7 @@ test_multiple_files_different_name (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -706,7 +706,7 @@ test_one_file_conflict_overwrite (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -764,7 +764,7 @@ test_one_file_conflict_new_destination (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -830,7 +830,7 @@ test_one_file_conflict_skip_file (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -897,7 +897,7 @@ test_one_file_error_file_over_directory (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
@@ -952,7 +952,7 @@ test_change_extract_destination (void)
archive = g_file_get_child (extract_test->in, "arextract.zip");
- arextract = autoar_extract_new_file (archive, extract_test->out, arpref);
+ arextract = autoar_extract_new (archive, extract_test->out, arpref);
data = extract_test_data_new_for_extract (arextract);
data->destination_to_suggest = g_file_get_child (extract_test->out,
diff --git a/tests/test-extract.c b/tests/test-extract.c
index 66a4791..54487e2 100644
--- a/tests/test-extract.c
+++ b/tests/test-extract.c
@@ -91,6 +91,8 @@ main (int argc,
AutoarPref *arpref;
GSettings *settings;
char *content;
+ g_autoptr (GFile) source = NULL;
+ g_autoptr (GFile) output = NULL;
if (argc < 3) {
g_printerr ("Usage: %s archive_file output_dir pattern_to_ignore ...\n",
@@ -107,7 +109,10 @@ main (int argc,
autoar_pref_set_delete_if_succeed (arpref, FALSE);
autoar_pref_set_pattern_to_ignore (arpref, (const char**)argv + 3);
- arextract = autoar_extract_new (argv[1], argv[2], arpref);
+ source = g_file_new_for_commandline_arg (argv[1]);
+ output = g_file_new_for_commandline_arg (argv[2]);
+
+ arextract = autoar_extract_new (source, output, arpref);
g_signal_connect (arextract, "scanned", G_CALLBACK (my_handler_scanned), NULL);
g_signal_connect (arextract, "decide-destination", G_CALLBACK (my_handler_decide_destination), NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]