[Erp5-report] r42587 kazuhiko - /erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/mimemapper.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Jan 21 16:03:07 CET 2011


Author: kazuhiko
Date: Fri Jan 21 16:03:07 2011
New Revision: 42587

URL: http://svn.erp5.org?rev=42587&view=rev
Log:
compute ext -> document_type dict only by import filters.
compute document_type -> (ext, ui_name) dict only by export filters.

Modified:
    erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/mimemapper.py

Modified: erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/mimemapper.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/mimemapper.py?rev=42587&r1=42586&r2=42587&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/mimemapper.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/handler/ooo/mimemapper.py [utf8] Fri Jan 21 16:03:07 2011
@@ -51,11 +51,8 @@ class MimeMapper(object):
     self._filter_by_extension_dict = {}
     self._extension_list_by_type = {}
     self._doc_type_list_by_extension = {}
-    # List of extensions that are ODF
-    self._odf_extension_list = []
     self._mimetype_by_filter_type = {}
     self._document_type_dict = {}
-    self.extension_list = []
 
   def _addFilter(self, filter):
     """Add filter in mimemapper catalog."""
@@ -100,6 +97,9 @@ class MimeMapper(object):
       uno_path -- full path to uno library
       office_binary_path -- full path to openoffice binary
     """
+    ignore_filter_list = (
+      'impress8_draw',
+      )
     uno_path = kw.get("uno_path", environ.get('uno_path'))
     office_binary_path = kw.get("office_binary_path",
                                 environ.get('office_binary_path'))
@@ -117,6 +117,8 @@ class MimeMapper(object):
                            close_fds=True).communicate()
     filter_dict, type_dict = json.loads(stdout)
     for filter_name, value in filter_dict.iteritems():
+      if None and filter_name in ignore_filter_list:
+        continue
       flag = value.get("Flags")
       # http://api.openoffice.org/docs/DevelopersGuide/OfficeDev/OfficeDev.xhtml#1_2_4_2_10_Properties_of_a_Filter
       # Import:0x01, Export:0x02, Template:0x04, Internal:0x08,
@@ -124,14 +126,14 @@ class MimeMapper(object):
       # UsesOptions (deprecated):0x80, Default:0x100,
       # NotInFileDialog:0x1000, NotInChooser:0x2000,
       # ThirdParty:0x80000, Preferred:0x10000000
-      if not flag & 0x02 or flag & 0x08 or flag & 0x1000 or flag & 0x2000:
+      if flag & 0x08 or flag & 0x1000 or flag & 0x2000:
         continue
       ui_name = value.get('UIName')
       filter_type = value.get('Type')
       filter_type_dict = type_dict.get(filter_type)
       if not ui_name:
         ui_name = filter_type_dict.get("UIName")
-      filter_extension_list = filter_type_dict.get("Extensions")[:1]
+      filter_extension_list = filter_type_dict.get("Extensions")
       mimetype = filter_type_dict.get("MediaType")
       if not (filter_extension_list and mimetype):
         continue
@@ -155,40 +157,32 @@ class MimeMapper(object):
       if doc_type not in self._document_type_dict:
         self._document_type_dict[doc_type] = document_service_str
 
-      if not self._mimetype_by_filter_type.has_key(filter_type):
-        self._mimetype_by_filter_type[filter_type] = mimetype
-      # Create key with empty list by document_type in dictonary
-      # e.g: {'com.sun.star.text.TextDocument': [] }
-      if not self._extension_list_by_type.has_key(document_service_str):
-        self._extension_list_by_type[document_service_str] = []
-
-      for ext in iter(filter_extension_list):
-        # All mimetypes that starts with "application/vnd.oasis.opendocument"
-        # are ODF.
-        if ext not in self.extension_list:
-          self.extension_list.append(ext)
-        if mimetype.startswith("application/vnd.oasis.opendocument"):
-          if not ext in self._odf_extension_list:
-            self._odf_extension_list.append(ext)
-        # Create key with empty list by extension in dictonary
-        # e.g: {'pdf': [] }
-        if not self._doc_type_list_by_extension.has_key(ext):
-          self._doc_type_list_by_extension[ext] = []
-        # Adds a tuple with extension and ui_name in document_type key. If
-        # tuple exists in list is not added.
-        # e.g {'com.sun.star.text.TextDocument': [('txt', 'Text'),]}
-        if not (ext, ui_name) in self._extension_list_by_type[document_service_str]:
-          self._extension_list_by_type[document_service_str].append((ext, ui_name))
-        # Adds a document type in extension key. If document type exists in
-        # list is not added.
-        # e.g {'doc': ['com.sun.star.text.TextDocument']}
-        if not document_service_str in self._doc_type_list_by_extension[ext]:
-          self._doc_type_list_by_extension[ext].append(document_service_str)
-        # Creates a object Filter with all attributes
-        filter = Filter(ext, filter_name, mimetype, document_service_str,
-          preferred=preferred, sort_index=sort_index, label=ui_name)
-        # Adds the object in filter_by_extension_dict
-        self._addFilter(filter)
+      # for Export filters
+      if flag & 0x02:
+        if not self._mimetype_by_filter_type.has_key(filter_type):
+          self._mimetype_by_filter_type[filter_type] = mimetype
+        # for export filters, one extension is enough.
+        for ext in filter_extension_list[:1]:
+          # Add (extension, ui_name) tuple by document_type.
+          # e.g {'com.sun.star.text.TextDocument': [('txt', 'Text'),]}
+          self._extension_list_by_type.setdefault(document_service_str, [])
+          if not (ext, ui_name) in self._extension_list_by_type[document_service_str]:
+            self._extension_list_by_type[document_service_str].append((ext, ui_name))
+          # register an export filter
+          filter = Filter(ext, filter_name, mimetype, document_service_str,
+                          preferred=preferred, sort_index=sort_index, label=ui_name)
+          self._addFilter(filter)
+
+      # for Import filters
+      if flag & 0x01:
+        # for import filters, we care all possible extensions.
+        for ext in filter_extension_list:
+          # Add a document type by extension.
+          # e.g {'doc': ['com.sun.star.text.TextDocument']}
+          self._doc_type_list_by_extension.setdefault(ext, [])
+          if not document_service_str in self._doc_type_list_by_extension[ext]:
+            self._doc_type_list_by_extension[ext].append(document_service_str)
+
     # hardcode 'extension -> document type' mappings according to
     # soffice behaviour for extensions having several candidates.
     self._doc_type_list_by_extension.update({



More information about the Erp5-report mailing list