[gedit] Use GFileInfo instead of several getters for the saver.



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]