diff options
author | Ting-Wei Lan <lantw44@gmail.com> | 2013-08-17 13:47:02 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2013-08-17 13:47:02 +0800 |
commit | 4d1a54457e07365a33e2dc3932edcbdbca1f8bc7 (patch) | |
tree | fe1a6997a96ddb12f699a4a4618e6d5198870db0 | |
parent | 96c2b230fffc604c85d4797d9d0eefe0a89553c6 (diff) | |
download | gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.gz gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.tar.zst gsoc2013-libgnome-autoar-4d1a54457e07365a33e2dc3932edcbdbca1f8bc7.zip |
AutoarPref: add some direct access functions
-rw-r--r-- | gnome-autoar/autoar-pref.c | 80 | ||||
-rw-r--r-- | gnome-autoar/autoar-pref.h | 8 | ||||
-rw-r--r-- | tests/test-pref.c | 11 |
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; } |