[nautilus-actions] Review NAIExporter interface



commit cecb5823e7ec8dd6cc8734d2337f1ffca362f1a3
Author: Pierre Wieser <pwieser trychlos org>
Date:   Tue Jan 3 23:02:29 2012 +0100

    Review NAIExporter interface

 ChangeLog               |    3 +
 src/core/na-exporter.c  |  153 +++++++++++++++++++++-------------------------
 src/core/na-iexporter.c |   31 +++++-----
 3 files changed, 88 insertions(+), 99 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 6f709e0..4f3257c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2012-01-03 Pierre Wieser <pwieser trychlos org>
 
+	* src/core/na-exporter.c:
+	* src/core/na-iexporter.c: Review NAIExporter interface.
+
 	* src/core/na-iduplicable.c: Review NAIDuplicable interface.
 
 	* src/core/na-icontext.c: Review NAIContext interface.
diff --git a/src/core/na-exporter.c b/src/core/na-exporter.c
index 58a2429..7d5a43f 100644
--- a/src/core/na-exporter.c
+++ b/src/core/na-exporter.c
@@ -37,9 +37,6 @@
 #include "na-exporter.h"
 #include "na-export-format.h"
 
-extern gboolean iexporter_initialized;
-extern gboolean iexporter_finalized;
-
 static GList       *exporter_get_formats( const NAIExporter *exporter );
 static void         exporter_free_formats( const NAIExporter *exporter, GList * str_list );
 static gchar       *exporter_get_name( const NAIExporter *exporter );
@@ -66,25 +63,21 @@ na_exporter_get_formats( const NAPivot *pivot )
 	g_return_val_if_fail( NA_IS_PIVOT( pivot ), NULL );
 
 	formats = NULL;
+	iexporters = na_pivot_get_providers( pivot, NA_IEXPORTER_TYPE );
 
-	if( iexporter_initialized && !iexporter_finalized ){
-
-		iexporters = na_pivot_get_providers( pivot, NA_IEXPORTER_TYPE );
+	for( imod = iexporters ; imod ; imod = imod->next ){
+		str_list = exporter_get_formats( NA_IEXPORTER( imod->data ));
 
-		for( imod = iexporters ; imod ; imod = imod->next ){
-			str_list = exporter_get_formats( NA_IEXPORTER( imod->data ));
-
-			for( is = str_list ; is ; is = is->next ){
-				format = na_export_format_new(( NAIExporterFormatExt * ) is->data );
-				formats = g_list_prepend( formats, format );
-			}
-
-			exporter_free_formats( NA_IEXPORTER( imod->data ), str_list );
+		for( is = str_list ; is ; is = is->next ){
+			format = na_export_format_new(( NAIExporterFormatExt * ) is->data );
+			formats = g_list_prepend( formats, format );
 		}
 
-		na_pivot_free_providers( iexporters );
+		exporter_free_formats( NA_IEXPORTER( imod->data ), str_list );
 	}
 
+	na_pivot_free_providers( iexporters );
+
 	return( formats );
 }
 
@@ -134,44 +127,41 @@ na_exporter_to_buffer( const NAPivot *pivot, const NAObjectItem *item, GQuark fo
 
 	buffer = NULL;
 
-	if( iexporter_initialized && !iexporter_finalized ){
-
-		g_debug( "%s: pivot=%p, item=%p (%s), format=%u (%s), messages=%p",
-				thisfn,
-				( void * ) pivot,
-				( void * ) item, G_OBJECT_TYPE_NAME( item ),
-				( guint ) format, g_quark_to_string( format ),
-				( void * ) messages );
-
-		exporter = find_exporter_for_format( pivot, format );
-		g_debug( "%s: exporter=%p (%s)", thisfn, ( void * ) exporter, G_OBJECT_TYPE_NAME( exporter ));
-
-		if( exporter ){
-			parms.version = 1;
-			parms.exported = ( NAObjectItem * ) item;
-			parms.format = format;
-			parms.buffer = NULL;
-			parms.messages = messages ? *messages : NULL;
-
-			if( NA_IEXPORTER_GET_INTERFACE( exporter )->to_buffer ){
-				NA_IEXPORTER_GET_INTERFACE( exporter )->to_buffer( exporter, &parms );
-
-				if( parms.buffer ){
-					buffer = parms.buffer;
-				}
-
-			} else {
-				name = exporter_get_name( exporter );
-				msg = g_strdup_printf( _( "NAIExporter %s doesn't implement 'to_buffer' interface." ), name );
-				*messages = g_slist_append( *messages, msg );
-				g_free( name );
+	g_debug( "%s: pivot=%p, item=%p (%s), format=%u (%s), messages=%p",
+			thisfn,
+			( void * ) pivot,
+			( void * ) item, G_OBJECT_TYPE_NAME( item ),
+			( guint ) format, g_quark_to_string( format ),
+			( void * ) messages );
+
+	exporter = find_exporter_for_format( pivot, format );
+	g_debug( "%s: exporter=%p (%s)", thisfn, ( void * ) exporter, G_OBJECT_TYPE_NAME( exporter ));
+
+	if( exporter ){
+		parms.version = 1;
+		parms.exported = ( NAObjectItem * ) item;
+		parms.format = format;
+		parms.buffer = NULL;
+		parms.messages = messages ? *messages : NULL;
+
+		if( NA_IEXPORTER_GET_INTERFACE( exporter )->to_buffer ){
+			NA_IEXPORTER_GET_INTERFACE( exporter )->to_buffer( exporter, &parms );
+
+			if( parms.buffer ){
+				buffer = parms.buffer;
 			}
 
 		} else {
-			msg = g_strdup_printf(
-					_( "No NAIExporter implementation found for %s format." ), g_quark_to_string( format ));
+			name = exporter_get_name( exporter );
+			msg = g_strdup_printf( _( "NAIExporter %s doesn't implement 'to_buffer' interface." ), name );
 			*messages = g_slist_append( *messages, msg );
+			g_free( name );
 		}
+
+	} else {
+		msg = g_strdup_printf(
+				_( "No NAIExporter implementation found for %s format." ), g_quark_to_string( format ));
+		*messages = g_slist_append( *messages, msg );
 	}
 
 	return( buffer );
@@ -206,45 +196,42 @@ na_exporter_to_file( const NAPivot *pivot, const NAObjectItem *item, const gchar
 
 	export_uri = NULL;
 
-	if( iexporter_initialized && !iexporter_finalized ){
-
-		g_debug( "%s: pivot=%p, item=%p (%s), folder_uri=%s, format=%u (%s), messages=%p",
-				thisfn,
-				( void * ) pivot,
-				( void * ) item, G_OBJECT_TYPE_NAME( item ),
-				folder_uri,
-				( guint ) format, g_quark_to_string( format ),
-				( void * ) messages );
-
-		exporter = find_exporter_for_format( pivot, format );
-
-		if( exporter ){
-			parms.version = 1;
-			parms.exported = ( NAObjectItem * ) item;
-			parms.folder = ( gchar * ) folder_uri;
-			parms.format = format;
-			parms.basename = NULL;
-			parms.messages = messages ? *messages : NULL;
-
-			if( NA_IEXPORTER_GET_INTERFACE( exporter )->to_file ){
-				NA_IEXPORTER_GET_INTERFACE( exporter )->to_file( exporter, &parms );
-
-				if( parms.basename ){
-					export_uri = g_strdup_printf( "%s%s%s", folder_uri, G_DIR_SEPARATOR_S, parms.basename );
-				}
-
-			} else {
-				name = exporter_get_name( exporter );
-				msg = g_strdup_printf( _( "NAIExporter %s doesn't implement 'to_file' interface." ), name );
-				*messages = g_slist_append( *messages, msg );
-				g_free( name );
+	g_debug( "%s: pivot=%p, item=%p (%s), folder_uri=%s, format=%u (%s), messages=%p",
+			thisfn,
+			( void * ) pivot,
+			( void * ) item, G_OBJECT_TYPE_NAME( item ),
+			folder_uri,
+			( guint ) format, g_quark_to_string( format ),
+			( void * ) messages );
+
+	exporter = find_exporter_for_format( pivot, format );
+
+	if( exporter ){
+		parms.version = 1;
+		parms.exported = ( NAObjectItem * ) item;
+		parms.folder = ( gchar * ) folder_uri;
+		parms.format = format;
+		parms.basename = NULL;
+		parms.messages = messages ? *messages : NULL;
+
+		if( NA_IEXPORTER_GET_INTERFACE( exporter )->to_file ){
+			NA_IEXPORTER_GET_INTERFACE( exporter )->to_file( exporter, &parms );
+
+			if( parms.basename ){
+				export_uri = g_strdup_printf( "%s%s%s", folder_uri, G_DIR_SEPARATOR_S, parms.basename );
 			}
 
 		} else {
-			msg = g_strdup_printf(
-					_( "No NAIExporter implementation found for %s format." ), g_quark_to_string( format ));
+			name = exporter_get_name( exporter );
+			msg = g_strdup_printf( _( "NAIExporter %s doesn't implement 'to_file' interface." ), name );
 			*messages = g_slist_append( *messages, msg );
+			g_free( name );
 		}
+
+	} else {
+		msg = g_strdup_printf(
+				_( "No NAIExporter implementation found for %s format." ), g_quark_to_string( format ));
+		*messages = g_slist_append( *messages, msg );
 	}
 
 	return( export_uri );
diff --git a/src/core/na-iexporter.c b/src/core/na-iexporter.c
index d5c1579..e51da3d 100644
--- a/src/core/na-iexporter.c
+++ b/src/core/na-iexporter.c
@@ -40,12 +40,11 @@ struct _NAIExporterInterfacePrivate {
 	void *empty;						/* so that gcc -pedantic is happy */
 };
 
-gboolean iexporter_initialized = FALSE;
-gboolean iexporter_finalized   = FALSE;
+static guint st_initializations = 0;	/* interface initialization count */
 
 static GType register_type( void );
-static void  interface_base_init( NAIExporterInterface *klass );
-static void  interface_base_finalize( NAIExporterInterface *klass );
+static void  interface_init( NAIExporterInterface *klass );
+static void  interface_finalize( NAIExporterInterface *klass );
 
 static guint iexporter_get_version( const NAIExporter *instance );
 
@@ -79,8 +78,8 @@ register_type( void )
 
 	static const GTypeInfo info = {
 		sizeof( NAIExporterInterface ),
-		( GBaseInitFunc ) interface_base_init,
-		( GBaseFinalizeFunc ) interface_base_finalize,
+		( GBaseInitFunc ) interface_init,
+		( GBaseFinalizeFunc ) interface_finalize,
 		NULL,
 		NULL,
 		NULL,
@@ -99,11 +98,11 @@ register_type( void )
 }
 
 static void
-interface_base_init( NAIExporterInterface *klass )
+interface_init( NAIExporterInterface *klass )
 {
-	static const gchar *thisfn = "na_iexporter_interface_base_init";
+	static const gchar *thisfn = "na_iexporter_interface_init";
 
-	if( !iexporter_initialized ){
+	if( !st_initializations ){
 
 		g_debug( "%s: klass%p (%s)", thisfn, ( void * ) klass, G_OBJECT_CLASS_NAME( klass ));
 
@@ -114,21 +113,21 @@ interface_base_init( NAIExporterInterface *klass )
 		klass->get_formats = NULL;
 		klass->to_file = NULL;
 		klass->to_buffer = NULL;
-
-		iexporter_initialized = TRUE;
 	}
+
+	st_initializations += 1;
 }
 
 static void
-interface_base_finalize( NAIExporterInterface *klass )
+interface_finalize( NAIExporterInterface *klass )
 {
-	static const gchar *thisfn = "na_iexporter_interface_base_finalize";
+	static const gchar *thisfn = "na_iexporter_interface_finalize";
 
-	if( iexporter_initialized && !iexporter_finalized ){
+	st_initializations -= 1;
 
-		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
+	if( !st_initializations ){
 
-		iexporter_finalized = TRUE;
+		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
 
 		g_free( klass->private );
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]