[Cxplorer-cvs 01205] CVS update: libcxp/src

Back to archive index

Yasumichi Akahoshi yasum****@users*****
2005年 9月 2日 (金) 01:23:59 JST


Index: libcxp/src/cxp-mime-manager.c
diff -u libcxp/src/cxp-mime-manager.c:1.1 libcxp/src/cxp-mime-manager.c:1.2
--- libcxp/src/cxp-mime-manager.c:1.1	Wed Aug 31 23:15:22 2005
+++ libcxp/src/cxp-mime-manager.c	Fri Sep  2 01:23:59 2005
@@ -34,6 +34,7 @@
 	gchar *country;
 	gchar *last_matched;
 	gchar *common;
+	gchar **xdgdirs;
 	gint parse_flag;
 	GHashTable *comments;
 };
@@ -110,6 +111,7 @@
 	obj->priv->common = NULL;
 	obj->priv->parse_flag = NO_NEED_PARSE;
 	obj->priv->comments = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+	obj->priv->xdgdirs = g_strsplit (g_getenv("XDG_DATA_DIRS"), ":", 0);
 }
 
 static void
@@ -122,6 +124,7 @@
 	g_free(cobj->priv->lang);
 	g_free(cobj->priv->country);
 	g_hash_table_destroy (cobj->priv->comments);
+	g_strfreev (cobj->priv->xdgdirs);
 		
 	g_free(cobj->priv);
 	G_OBJECT_CLASS(parent_class)->finalize(object);
@@ -214,6 +217,7 @@
 	gchar *filename;
 	gchar *content;
 	gssize len;
+	gint idx;
 	GMarkupParseContext *context;
 	GMarkupParser parser = {
 		cxp_mime_manager_on_start_element,
@@ -227,30 +231,34 @@
 	{
 		manager->priv->parse_flag = NO_NEED_PARSE;
 
-		filename = g_strdup_printf("/usr/share/mime/%s.xml", mimetype);
-		if (g_file_get_contents (filename, &content, &len, NULL))
+		for(idx=0; manager->priv->xdgdirs[idx] != NULL; idx++)
 		{
-			context = g_markup_parse_context_new (&parser, 0, manager, NULL);
-			g_markup_parse_context_parse (context, content, len, NULL);
-			g_markup_parse_context_free (context);
-			if(manager->priv->last_matched != NULL)
-			{
-				result = g_strdup (manager->priv->last_matched);
-				g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->last_matched);
-				g_free (manager->priv->common);
-			}
-			else
+			filename = g_strdup_printf("%s/mime/%s.xml", manager->priv->xdgdirs[idx], mimetype);
+			if (g_file_get_contents (filename, &content, &len, NULL))
 			{
-				result = g_strdup (manager->priv->common);
-				g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->common);
+				context = g_markup_parse_context_new (&parser, 0, manager, NULL);
+				g_markup_parse_context_parse (context, content, len, NULL);
+				g_markup_parse_context_free (context);
+				if(manager->priv->last_matched != NULL)
+				{
+					result = g_strdup (manager->priv->last_matched);
+					g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->last_matched);
+					g_free (manager->priv->common);
+				}
+				else
+				{
+					result = g_strdup (manager->priv->common);
+					g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), manager->priv->common);
+				}
+				break;
 			}
+			g_free (filename);
 		}
-		else
+		if(result == NULL)	
 		{
 				result = g_strdup ("unknown file");
 				g_hash_table_replace (manager->priv->comments, g_strdup(mimetype), g_strdup("unknown file"));
 		}
-		g_free (filename);
 	}
 
 	return result;


Cxplorer-cvs メーリングリストの案内
Back to archive index