[gnumeric] OOO file probe: handle old files with no mimetype.



commit 0124b3cc1d52c1c43e51ddc290e616545a4c7058
Author: Morten Welinder <terra gnome org>
Date:   Mon May 4 09:12:08 2009 -0400

    OOO file probe: handle old files with no mimetype.
---
 plugins/openoffice/ChangeLog         |    6 ++++++
 plugins/openoffice/openoffice-read.c |   33 +++++++++++++++++++++++++--------
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/plugins/openoffice/ChangeLog b/plugins/openoffice/ChangeLog
index 0761cd8..3a0510c 100644
--- a/plugins/openoffice/ChangeLog
+++ b/plugins/openoffice/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-04  Morten Welinder  <terra gnome org>
+
+	* openoffice-read.c (openoffice_file_probe): Handle certain
+	suffixes too, even if file has no mimetype.  Fixes #581143
+	except for a go_plugin_file_opener_can_probe problem.
+
 2009-04-25  Morten Welinder <terra gnome org>
 
 	* Release 1.9.6
diff --git a/plugins/openoffice/openoffice-read.c b/plugins/openoffice/openoffice-read.c
index 556d9aa..7a915c6 100644
--- a/plugins/openoffice/openoffice-read.c
+++ b/plugins/openoffice/openoffice-read.c
@@ -59,6 +59,7 @@
 #include <gsf/gsf-opendoc-utils.h>
 #include <gsf/gsf-doc-meta-data.h>
 #include <gsf/gsf-output-stdio.h>
+#include <gsf/gsf-utils.h>
 #include <glib/gi18n-lib.h>
 
 #include <goffice/graph/gog-chart.h>
@@ -3111,16 +3112,32 @@ openoffice_file_probe (GOFileOpener const *fo, GsfInput *input, FileProbeLevel p
 gboolean
 openoffice_file_probe (GOFileOpener const *fo, GsfInput *input, FileProbeLevel pl)
 {
-	GsfInfile	*zip;
-	OOVer           ver;
+	gboolean ext_ok = FALSE;
+	char const *name = gsf_input_name (input);
+	if (name) {
+		name = gsf_extension_pointer (name);
+		ext_ok = (name != NULL &&
+			  (g_ascii_strcasecmp (name, "ods") == 0 ||
+			   g_ascii_strcasecmp (name, "odt") == 0 ||
+			   g_ascii_strcasecmp (name, "sxc") == 0 ||
+			   g_ascii_strcasecmp (name, "stc") == 0));
+	}
 
-	zip = gsf_infile_zip_new (input, NULL);
-	if (zip == NULL)
-		return FALSE;
+	if (pl == FILE_PROBE_CONTENT) {
+		GsfInfile	*zip;
+		OOVer           ver;
 
-	ver = determine_oo_version (zip, OOO_VER_UNKNOWN);
+		zip = gsf_infile_zip_new (input, NULL);
+		if (zip == NULL)
+			return FALSE;
 
-	g_object_unref (zip);
+		ver = determine_oo_version
+			(zip, ext_ok ? OOO_VER_1 : OOO_VER_UNKNOWN);
 
-	return ver != OOO_VER_UNKNOWN;
+		g_object_unref (zip);
+
+		return ver != OOO_VER_UNKNOWN;
+	} else {
+		return ext_ok;
+	}
 }



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