aboutsummaryrefslogtreecommitdiffstats
path: root/embed/ephy-favicon-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'embed/ephy-favicon-cache.c')
-rw-r--r--embed/ephy-favicon-cache.c118
1 files changed, 70 insertions, 48 deletions
diff --git a/embed/ephy-favicon-cache.c b/embed/ephy-favicon-cache.c
index 06af26e56..35e3f0809 100644
--- a/embed/ephy-favicon-cache.c
+++ b/embed/ephy-favicon-cache.c
@@ -39,9 +39,8 @@
#include "ephy-glib-compat.h"
#include <glib/gstdio.h>
+#include <gio/gio.h>
#include <libgnomeui/libgnomeui.h>
-#include <libgnomevfs/gnome-vfs-ops.h>
-#include <libgnomevfs/gnome-vfs-directory.h>
#define EPHY_FAVICON_CACHE_XML_ROOT (const xmlChar *)"ephy_favicons_cache"
#define EPHY_FAVICON_CACHE_XML_VERSION (const xmlChar *)"1.1"
@@ -250,7 +249,10 @@ remove_obsolete_icons (EphyFaviconCache *cache,
(kid, EPHY_NODE_FAVICON_PROP_FILENAME);
path = g_build_filename (priv->directory,
filename, NULL);
- gnome_vfs_unlink (path);
+ if (g_unlink (path) < 0)
+ {
+ g_warning ("Unable to delete %s", path);
+ }
g_free (path);
ephy_node_unref (kid);
@@ -412,29 +414,28 @@ kill_download (const char *key,
return TRUE;
}
-static gboolean
-delete_file (const char *rel_path,
- GnomeVFSFileInfo *info,
- gboolean rec_will_loop,
- EphyFaviconCache *cache,
- gboolean *recurse)
+static void
+delete_file (GFile *dir,
+ GFileInfo *file_info)
{
- EphyFaviconCachePrivate *priv = cache->priv;
- char *path;
-
- *recurse = FALSE;
-
- g_return_val_if_fail (info != NULL, TRUE);
-
- if ((info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_TYPE) == 0 ||
- info->type != GNOME_VFS_FILE_TYPE_REGULAR) return TRUE;
-
- path = g_build_filename (priv->directory, rel_path, NULL);
- gnome_vfs_unlink (path);
- g_free (path);
-
- /* continue with the visit */
- return TRUE;
+ GFileType type;
+
+ type = g_file_info_get_file_type (file_info);
+
+ if (type == G_FILE_TYPE_REGULAR)
+ {
+ char *path;
+
+ path = g_build_filename (g_file_get_path (dir),
+ g_file_info_get_name (file_info),
+ NULL);
+ if (g_unlink (path) < 0)
+ {
+ g_warning ("Unable to delete %s", path);
+ }
+
+ g_free (path);
+ }
}
static void
@@ -509,8 +510,11 @@ favicon_download_cancelled_cb (EphyEmbedPersist *persist,
g_hash_table_remove (cache->priv->downloads_hash, url);
/* remove a partially downloaded file */
- dest = ephy_embed_persist_get_dest (persist);
- gnome_vfs_unlink (dest);
+ dest = ephy_embed_persist_get_dest (persist);
+ if (g_unlink (dest) < 0)
+ {
+ g_warning ("Unable to delete %s", dest);
+ }
/* FIXME: re-schedule to try again after n days? */
@@ -700,29 +704,35 @@ ephy_favicon_cache_get (EphyFaviconCache *cache,
(int) checklevel);
}
- /* Now check the type. We renamed the file above, so gnome-vfs does NOT
+ /* Now check the type. We renamed the file above, so glib does NOT
* fall back to extension checking if the slow mime check fails for
* whatever reason
*/
if (checklevel & NEEDS_TYPE_CHECK)
{
- GnomeVFSFileInfo *info;
- gboolean valid = FALSE, is_ao = FALSE;;
-
+ GFile *file;
+ GFileInfo *file_info;
+ const char *mime_type;
+ gboolean valid = FALSE, is_ao = FALSE;
+
+ file = g_file_new_for_path (pix_file);
+
/* Sniff mime type and check if it's safe to open */
- info = gnome_vfs_file_info_new ();
- if (gnome_vfs_get_file_info (pix_file, info,
- GNOME_VFS_FILE_INFO_GET_MIME_TYPE |
- GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE) == GNOME_VFS_OK &&
- (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_MIME_TYPE) &&
- info->mime_type != NULL)
+ file_info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ 0, NULL, NULL);
+ mime_type = g_file_info_get_content_type (file_info);
+ if (file_info == NULL)
{
- valid = strcmp (info->mime_type, "image/x-ico") == 0 ||
- strcmp (info->mime_type, "image/png") == 0 ||
- strcmp (info->mime_type, "image/gif") == 0;
- is_ao = strcmp (info->mime_type, "application/octet-stream") == 0;
+ return NULL;
}
- gnome_vfs_file_info_unref (info);
+ valid = strcmp (mime_type, "image/x-ico") == 0 ||
+ strcmp (mime_type, "image/png") == 0 ||
+ strcmp (mime_type, "image/gif") == 0;
+ is_ao = strcmp (mime_type, "application/octet-stream") == 0;
+
+ g_object_unref (file_info);
+ g_object_unref (file);
/* As a special measure, we try to load an application/octet-stream file
* as an ICO file, since we cannot detect a ICO file without .ico extension
@@ -835,6 +845,9 @@ ephy_favicon_cache_get (EphyFaviconCache *cache,
void
ephy_favicon_cache_clear (EphyFaviconCache *cache)
{
+ GFileEnumerator *file_enum;
+ GFile *dir;
+ GFileInfo *file_info = NULL;
EphyFaviconCachePrivate *priv = cache->priv;
g_return_if_fail (EPHY_IS_FAVICON_CACHE (cache));
@@ -843,10 +856,19 @@ ephy_favicon_cache_clear (EphyFaviconCache *cache)
ephy_favicon_cache_save (cache);
/* Now remove any remaining files from the cache directory */
- gnome_vfs_directory_visit (priv->directory,
- GNOME_VFS_FILE_INFO_DEFAULT,
- GNOME_VFS_DIRECTORY_VISIT_SAMEFS |
- GNOME_VFS_DIRECTORY_VISIT_LOOPCHECK,
- (GnomeVFSDirectoryVisitFunc) delete_file,
- cache);
+ dir = g_file_new_for_path (priv->directory);
+ file_enum = g_file_enumerate_children (dir,
+ G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+ G_FILE_ATTRIBUTE_STANDARD_NAME ","
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ 0, NULL, NULL);
+ file_info = g_file_enumerator_next_file (file_enum, NULL, NULL);
+ while (file_info != NULL)
+ {
+ delete_file (dir, file_info);
+ file_info = g_file_enumerator_next_file (file_enum, NULL, NULL);
+ g_object_unref (file_info);
+ }
+ g_object_unref (dir);
+ g_file_enumerator_close (file_enum, NULL, NULL);
}