[gedit] Use GFileInfo instead of several getters for the saver.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gedit] Use GFileInfo instead of several getters for the saver.
- Date: Wed, 25 Nov 2009 23:42:57 +0000 (UTC)
commit ac611f9a394fd7755e43b6bd0171f36aa62be1bd
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Wed Nov 25 20:38:36 2009 +0100
Use GFileInfo instead of several getters for the saver.
Removed get_mtime and get_content_type.
gedit/gedit-document-saver.c | 39 +++++++++++++---------
gedit/gedit-document-saver.h | 9 ++---
gedit/gedit-document.c | 21 +++++++++--
gedit/gedit-gio-document-saver.c | 64 +++++++-----------------------------
gedit/gedit-local-document-saver.c | 38 +++++++++++----------
5 files changed, 75 insertions(+), 96 deletions(-)
---
diff --git a/gedit/gedit-document-saver.c b/gedit/gedit-document-saver.c
index 3865ffb..783d161 100644
--- a/gedit/gedit-document-saver.c
+++ b/gedit/gedit-document-saver.c
@@ -139,12 +139,27 @@ gedit_document_saver_finalize (GObject *object)
G_OBJECT_CLASS (gedit_document_saver_parent_class)->finalize (object);
}
+static void
+gedit_document_saver_dispose (GObject *object)
+{
+ GeditDocumentSaver *saver = GEDIT_DOCUMENT_SAVER (object);
+
+ if (saver->info != NULL)
+ {
+ g_object_unref (saver->info);
+ saver->info = NULL;
+ }
+
+ G_OBJECT_CLASS (gedit_document_saver_parent_class)->dispose (object);
+}
+
static void
gedit_document_saver_class_init (GeditDocumentSaverClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gedit_document_saver_finalize;
+ object_class->dispose = gedit_document_saver_dispose;
object_class->set_property = gedit_document_saver_set_property;
object_class->get_property = gedit_document_saver_get_property;
@@ -487,22 +502,6 @@ gedit_document_saver_get_uri (GeditDocumentSaver *saver)
return saver->uri;
}
-const gchar *
-gedit_document_saver_get_content_type (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), NULL);
-
- return GEDIT_DOCUMENT_SAVER_GET_CLASS (saver)->get_content_type (saver);
-}
-
-time_t
-gedit_document_saver_get_mtime (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), 0);
-
- return GEDIT_DOCUMENT_SAVER_GET_CLASS (saver)->get_mtime (saver);
-}
-
/* Returns 0 if file size is unknown */
goffset
gedit_document_saver_get_file_size (GeditDocumentSaver *saver)
@@ -519,3 +518,11 @@ gedit_document_saver_get_bytes_written (GeditDocumentSaver *saver)
return GEDIT_DOCUMENT_SAVER_GET_CLASS (saver)->get_bytes_written (saver);
}
+
+GFileInfo *
+gedit_document_saver_get_info (GeditDocumentSaver *saver)
+{
+ g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), NULL);
+
+ return saver->info;
+}
diff --git a/gedit/gedit-document-saver.h b/gedit/gedit-document-saver.h
index 2095ec3..a83a818 100644
--- a/gedit/gedit-document-saver.h
+++ b/gedit/gedit-document-saver.h
@@ -56,6 +56,7 @@ struct _GeditDocumentSaver
GObject object;
/*< private >*/
+ GFileInfo *info;
GeditDocument *document;
gboolean used;
@@ -86,8 +87,6 @@ struct _GeditDocumentSaverClass
/* VTable */
void (* save) (GeditDocumentSaver *saver,
time_t old_mtime);
- const gchar * (* get_content_type) (GeditDocumentSaver *saver);
- time_t (* get_mtime) (GeditDocumentSaver *saver);
goffset (* get_file_size) (GeditDocumentSaver *saver);
goffset (* get_bytes_written) (GeditDocumentSaver *saver);
};
@@ -135,15 +134,13 @@ const gchar *gedit_document_saver_get_backup_uri (GeditDocumentSaver *saver);
void *gedit_document_saver_set_backup_uri (GeditDocumentSaver *saver,
const gchar *backup_uri);
-const gchar *gedit_document_saver_get_content_type (GeditDocumentSaver *saver);
-
-time_t gedit_document_saver_get_mtime (GeditDocumentSaver *saver);
-
/* Returns 0 if file size is unknown */
goffset gedit_document_saver_get_file_size (GeditDocumentSaver *saver);
goffset gedit_document_saver_get_bytes_written (GeditDocumentSaver *saver);
+GFileInfo *gedit_document_saver_get_info (GeditDocumentSaver *saver);
+
G_END_DECLS
#endif /* __GEDIT_DOCUMENT_SAVER_H__ */
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
index ce8500d..7be1e80 100644
--- a/gedit/gedit-document.c
+++ b/gedit/gedit-document.c
@@ -1252,15 +1252,28 @@ document_saver_saving (GeditDocumentSaver *saver,
if (error == NULL)
{
const gchar *uri;
- const gchar *content_type;
+ const gchar *content_type = NULL;
+ goffset mtime = 0;
+ GFileInfo *info;
uri = gedit_document_saver_get_uri (saver);
set_uri (doc, uri);
- content_type = gedit_document_saver_get_content_type (saver);
- set_content_type (doc, content_type);
+ info = gedit_document_saver_get_info (saver);
+
+ if (info != NULL)
+ {
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE))
+ content_type = g_file_info_get_attribute_string (info,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
- doc->priv->mtime = gedit_document_saver_get_mtime (saver);
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED))
+ mtime = g_file_info_get_attribute_uint64 (info,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ }
+
+ set_content_type (doc, content_type);
+ doc->priv->mtime = mtime;
g_get_current_time (&doc->priv->time_of_last_save_or_load);
diff --git a/gedit/gedit-gio-document-saver.c b/gedit/gedit-gio-document-saver.c
index d57f98c..180cce3 100644
--- a/gedit/gedit-gio-document-saver.c
+++ b/gedit/gedit-gio-document-saver.c
@@ -59,8 +59,6 @@ typedef struct
static void gedit_gio_document_saver_save (GeditDocumentSaver *saver,
time_t old_mtime);
-static const gchar *gedit_gio_document_saver_get_content_type (GeditDocumentSaver *saver);
-static time_t gedit_gio_document_saver_get_mtime (GeditDocumentSaver *saver);
static goffset gedit_gio_document_saver_get_file_size (GeditDocumentSaver *saver);
static goffset gedit_gio_document_saver_get_bytes_written (GeditDocumentSaver *saver);
@@ -69,8 +67,7 @@ static void check_modified_async (AsyncData *async);
struct _GeditGioDocumentSaverPrivate
{
- time_t doc_mtime;
- gchar *content_type;
+ time_t old_mtime;
goffset size;
goffset bytes_written;
@@ -98,8 +95,6 @@ gedit_gio_document_saver_finalize (GObject *object)
if (priv->gfile)
g_object_unref (priv->gfile);
- g_free (priv->content_type);
-
if (priv->error)
g_error_free (priv->error);
@@ -140,8 +135,6 @@ gedit_gio_document_saver_class_init (GeditGioDocumentSaverClass *klass)
object_class->finalize = gedit_gio_document_saver_finalize;
saver_class->save = gedit_gio_document_saver_save;
- saver_class->get_content_type = gedit_gio_document_saver_get_content_type;
- saver_class->get_mtime = gedit_gio_document_saver_get_mtime;
saver_class->get_file_size = gedit_gio_document_saver_get_file_size;
saver_class->get_bytes_written = gedit_gio_document_saver_get_bytes_written;
@@ -182,31 +175,6 @@ async_failed (AsyncData *async,
static void write_file_chunk (AsyncData *async);
static void
-handle_file_info (AsyncData *async,
- GFileInfo *info)
-{
- GeditGioDocumentSaver *saver;
- GTimeVal mtime;
-
- saver = async->saver;
-
- gedit_debug_message (DEBUG_SAVER, "Query info finished");
-
- if (g_file_info_has_attribute (info,
- G_FILE_ATTRIBUTE_TIME_MODIFIED))
- {
- g_file_info_get_modification_time (info, &mtime);
- saver->priv->doc_mtime = mtime.tv_sec;
- }
-
- if (g_file_info_has_attribute (info,
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE))
- {
- saver->priv->content_type = g_strdup (g_file_info_get_content_type (info));
- }
-}
-
-static void
remote_reget_info_cb (GFile *source,
GAsyncResult *res,
AsyncData *async)
@@ -229,8 +197,10 @@ remote_reget_info_cb (GFile *source,
if (info != NULL)
{
- handle_file_info (async, info);
- g_object_unref (info);
+ if (GEDIT_DOCUMENT_SAVER (saver)->info != NULL)
+ g_object_unref (GEDIT_DOCUMENT_SAVER (saver)->info);
+
+ GEDIT_DOCUMENT_SAVER (saver)->info = info;
}
else
{
@@ -343,8 +313,10 @@ remote_get_info_cb (GFileOutputStream *stream,
}
else
{
- handle_file_info (async, info);
- g_object_unref (info);
+ if (GEDIT_DOCUMENT_SAVER (saver)->info != NULL)
+ g_object_unref (GEDIT_DOCUMENT_SAVER (saver)->info);
+
+ GEDIT_DOCUMENT_SAVER (saver)->info = info;
next_callback = (GAsyncReadyCallback) close_async_ready_cb;
}
@@ -658,8 +630,8 @@ check_modification_callback (GFile *source,
g_file_info_get_modification_time (info, &mtime);
- if (gvsaver->priv->doc_mtime > 0 &&
- mtime.tv_sec != gvsaver->priv->doc_mtime &&
+ if (gvsaver->priv->old_mtime > 0 &&
+ mtime.tv_sec != gvsaver->priv->old_mtime &&
(GEDIT_DOCUMENT_SAVER (gvsaver)->flags & GEDIT_DOCUMENT_SAVE_IGNORE_MTIME) == 0)
{
gedit_debug_message (DEBUG_SAVER, "File is externally modified");
@@ -720,7 +692,7 @@ gedit_gio_document_saver_save (GeditDocumentSaver *saver,
{
GeditGioDocumentSaver *gvsaver = GEDIT_GIO_DOCUMENT_SAVER (saver);
- gvsaver->priv->doc_mtime = old_mtime;
+ gvsaver->priv->old_mtime = old_mtime;
gvsaver->priv->gfile = g_file_new_for_uri (saver->uri);
/* saving start */
@@ -733,18 +705,6 @@ gedit_gio_document_saver_save (GeditDocumentSaver *saver,
NULL);
}
-static const gchar *
-gedit_gio_document_saver_get_content_type (GeditDocumentSaver *saver)
-{
- return GEDIT_GIO_DOCUMENT_SAVER (saver)->priv->content_type;
-}
-
-static time_t
-gedit_gio_document_saver_get_mtime (GeditDocumentSaver *saver)
-{
- return GEDIT_GIO_DOCUMENT_SAVER (saver)->priv->doc_mtime;
-}
-
static goffset
gedit_gio_document_saver_get_file_size (GeditDocumentSaver *saver)
{
diff --git a/gedit/gedit-local-document-saver.c b/gedit/gedit-local-document-saver.c
index 82017a2..0411be5 100644
--- a/gedit/gedit-local-document-saver.c
+++ b/gedit/gedit-local-document-saver.c
@@ -59,15 +59,12 @@
static void gedit_local_document_saver_save (GeditDocumentSaver *saver,
time_t old_mtime);
-static const gchar *gedit_local_document_saver_get_content_type (GeditDocumentSaver *saver);
-static time_t gedit_local_document_saver_get_mtime (GeditDocumentSaver *saver);
static goffset gedit_local_document_saver_get_file_size (GeditDocumentSaver *saver);
static goffset gedit_local_document_saver_get_bytes_written (GeditDocumentSaver *saver);
struct _GeditLocalDocumentSaverPrivate
{
- goffset size;
goffset bytes_written;
/* temp data for local files */
@@ -104,8 +101,6 @@ gedit_local_document_saver_class_init (GeditDocumentSaverClass *klass)
object_class->finalize = gedit_local_document_saver_finalize;
saver_class->save = gedit_local_document_saver_save;
- saver_class->get_content_type = gedit_local_document_saver_get_content_type;
- saver_class->get_mtime = gedit_local_document_saver_get_mtime;
saver_class->get_file_size = gedit_local_document_saver_get_file_size;
saver_class->get_bytes_written = gedit_local_document_saver_get_bytes_written;
@@ -297,6 +292,21 @@ all_xattrs (const char *xattr G_GNUC_UNUSED,
}
#endif
+static void
+set_saver_info (GeditLocalDocumentSaver *lsaver)
+{
+ GeditDocumentSaver *saver = GEDIT_DOCUMENT_SAVER (lsaver);
+
+ if (saver->info != NULL)
+ g_object_unref (saver->info);
+
+ saver->info = g_file_info_new ();
+ g_file_info_set_content_type (saver->info, lsaver->priv->content_type);
+ g_file_info_set_attribute_uint64 (saver->info,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ lsaver->priv->doc_mtime);
+}
+
static gboolean
save_existing_local_file (GeditLocalDocumentSaver *lsaver)
{
@@ -727,6 +737,8 @@ save_existing_local_file (GeditLocalDocumentSaver *lsaver)
g_free (backup_filename);
+ set_saver_info (lsaver);
+
gedit_document_saver_saving (saver, TRUE, lsaver->priv->error);
/* stop the timeout */
@@ -772,6 +784,8 @@ save_new_local_file (GeditLocalDocumentSaver *lsaver)
lsaver->priv->fd = -1;
+ set_saver_info (lsaver);
+
gedit_document_saver_saving (GEDIT_DOCUMENT_SAVER (lsaver),
TRUE,
lsaver->priv->error);
@@ -875,22 +889,10 @@ gedit_local_document_saver_save (GeditDocumentSaver *saver,
}
}
-static const gchar *
-gedit_local_document_saver_get_content_type (GeditDocumentSaver *saver)
-{
- return GEDIT_LOCAL_DOCUMENT_SAVER (saver)->priv->content_type;
-}
-
-static time_t
-gedit_local_document_saver_get_mtime (GeditDocumentSaver *saver)
-{
- return GEDIT_LOCAL_DOCUMENT_SAVER (saver)->priv->doc_mtime;
-}
-
static goffset
gedit_local_document_saver_get_file_size (GeditDocumentSaver *saver)
{
- return GEDIT_LOCAL_DOCUMENT_SAVER (saver)->priv->size;
+ return 0;
}
static goffset
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]