summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2013-08-17 13:47:02 +0800
committerLAN-TW <lantw44@gmail.com>2013-08-17 13:47:02 +0800
commit4d1a54457e07365a33e2dc3932edcbdbca1f8bc7 (patch)
treefe1a6997a96ddb12f699a4a4618e6d5198870db0
parent96c2b230fffc604c85d4797d9d0eefe0a89553c6 (diff)
downloadgsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar
gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.gz
gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.bz2
gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.lz
gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.xz
gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.zst
gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.zip
AutoarPref: add some direct access functions
-rw-r--r--gnome-autoar/autoar-pref.c80
-rw-r--r--gnome-autoar/autoar-pref.h8
-rw-r--r--tests/test-pref.c11
3 files changed, 84 insertions, 15 deletions
diff --git a/gnome-autoar/autoar-pref.c b/gnome-autoar/autoar-pref.c
index 21bd725..fa21e34 100644
--- a/gnome-autoar/autoar-pref.c
+++ b/gnome-autoar/autoar-pref.c
@@ -487,20 +487,48 @@ autoar_pref_check_file_name (AutoarPref *arpref,
const char *filepath)
{
char *dot_location;
- int i;
g_return_val_if_fail (AUTOAR_IS_PREF (arpref), FALSE);
- g_return_val_if_fail (arpref->priv->file_name_suffix != NULL, FALSE);
+ g_return_val_if_fail (filepath != NULL, FALSE);
dot_location = strrchr (filepath, '.');
if (dot_location == NULL)
return FALSE;
+ return autoar_pref_check_file_name_d (arpref, dot_location + 1);
+}
+
+gboolean
+autoar_pref_check_file_name_file (AutoarPref *arpref,
+ GFile *file)
+{
+ char *basename;
+ gboolean result;
+
+ g_return_val_if_fail (AUTOAR_IS_PREF (arpref), FALSE);
+ g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+ basename = g_file_get_basename (file);
+ result = autoar_pref_check_file_name (arpref, basename);
+ g_free (basename);
+
+ return result;
+}
+
+gboolean
+autoar_pref_check_file_name_d (AutoarPref *arpref,
+ const char *extension)
+{
+ int i;
+
+ g_return_val_if_fail (AUTOAR_IS_PREF (arpref), FALSE);
+ g_return_val_if_fail (extension != NULL, FALSE);
+ g_return_val_if_fail (arpref->priv->file_name_suffix != NULL, FALSE);
+
for (i = 0; arpref->priv->file_name_suffix[i] != NULL; i++) {
- if (strcmp (dot_location + 1, arpref->priv->file_name_suffix[i]) == 0)
+ if (strcmp (extension, arpref->priv->file_name_suffix[i]) == 0)
return TRUE;
}
-
return FALSE;
}
@@ -508,22 +536,36 @@ gboolean
autoar_pref_check_mime_type (AutoarPref *arpref,
const char *filepath)
{
- int i;
GFile *file;
+ gboolean result;
+
+ g_return_val_if_fail (AUTOAR_IS_PREF (arpref), FALSE);
+ g_return_val_if_fail (filepath != NULL, FALSE);
+
+ file = g_file_new_for_commandline_arg (filepath);
+ result = autoar_pref_check_mime_type_file (arpref, file);
+ g_object_unref (file);
+
+ return result;
+}
+
+gboolean
+autoar_pref_check_mime_type_file (AutoarPref *arpref,
+ GFile *file)
+{
GFileInfo *fileinfo;
const char *content_type;
const char *mime_type;
+ gboolean result;
g_return_val_if_fail (AUTOAR_IS_PREF (arpref), FALSE);
- g_return_val_if_fail (arpref->priv->file_mime_type != NULL, FALSE);
+ g_return_val_if_fail (G_IS_FILE (file), FALSE);
- file = g_file_new_for_commandline_arg (filepath);
fileinfo = g_file_query_info (file,
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
NULL,
NULL);
- g_object_unref (file);
if (fileinfo == NULL)
return FALSE;
@@ -533,13 +575,25 @@ autoar_pref_check_mime_type (AutoarPref *arpref,
mime_type = g_content_type_get_mime_type (content_type);
g_debug ("MIME Type: %s\n", mime_type);
+ result = autoar_pref_check_mime_type_d (arpref, mime_type);
+ g_object_unref (fileinfo);
+
+ return result;
+}
+
+gboolean
+autoar_pref_check_mime_type_d (AutoarPref *arpref,
+ const char *mime_type)
+{
+ int i;
+
+ g_return_val_if_fail (AUTOAR_IS_PREF (arpref), FALSE);
+ g_return_val_if_fail (mime_type != NULL, FALSE);
+ g_return_val_if_fail (arpref->priv->file_mime_type != NULL, FALSE);
+
for (i = 0; arpref->priv->file_mime_type[i] != NULL; i++) {
- if (strcmp (mime_type, arpref->priv->file_mime_type[i]) == 0) {
- g_object_unref (fileinfo);
+ if (strcmp (mime_type, arpref->priv->file_mime_type[i]) == 0)
return TRUE;
- }
}
-
- g_object_unref (fileinfo);
return FALSE;
}
diff --git a/gnome-autoar/autoar-pref.h b/gnome-autoar/autoar-pref.h
index a935ad3..f10e903 100644
--- a/gnome-autoar/autoar-pref.h
+++ b/gnome-autoar/autoar-pref.h
@@ -105,8 +105,16 @@ void autoar_pref_forget_changes (AutoarPref *arpref);
gboolean autoar_pref_check_file_name (AutoarPref *arpref,
const char *filepath);
+gboolean autoar_pref_check_file_name_file (AutoarPref *arpref,
+ GFile *file);
+gboolean autoar_pref_check_file_name_d (AutoarPref *arpref,
+ const char *extension);
gboolean autoar_pref_check_mime_type (AutoarPref *arpref,
const char *filepath);
+gboolean autoar_pref_check_mime_type_file (AutoarPref *arpref,
+ GFile *file);
+gboolean autoar_pref_check_mime_type_d (AutoarPref *arpref,
+ const char *mime_type);
AutoarPrefFormat autoar_pref_get_default_format (AutoarPref *arpref);
AutoarPrefFilter autoar_pref_get_default_filter (AutoarPref *arpref);
diff --git a/tests/test-pref.c b/tests/test-pref.c
index 5a348c8..b5d317e 100644
--- a/tests/test-pref.c
+++ b/tests/test-pref.c
@@ -8,6 +8,7 @@ main (int argc,
{
AutoarPref *arpref;
GSettings *settings;
+ GFile *file;
if (argc < 2) {
g_printerr ("Usage: %s archive_file\n", argv[0]);
@@ -16,11 +17,17 @@ main (int argc,
settings = g_settings_new (AUTOAR_PREF_DEFAULT_GSCHEMA_ID);
arpref = autoar_pref_new_with_gsettings (settings);
+ file = g_file_new_for_commandline_arg (argv[1]);
- g_print ("file-name-suffix check: %d\n", autoar_pref_check_file_name (arpref, argv[1]));
- g_print ("file-mime-type check: %d\n", autoar_pref_check_mime_type (arpref, argv[1]));
+ g_print ("file-name-suffix check: %d, %d\n",
+ autoar_pref_check_file_name (arpref, argv[1]),
+ autoar_pref_check_file_name_file (arpref, file));
+ g_print ("file-mime-type check: %d, %d\n",
+ autoar_pref_check_mime_type (arpref, argv[1]),
+ autoar_pref_check_mime_type_file (arpref, file));
g_object_unref (arpref);
+ g_object_unref (file);
return 0;
}