Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/services/clipboard/typeregistry.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/clipboard/typeregistry.py')
-rw-r--r--services/clipboard/typeregistry.py844
1 files changed, 0 insertions, 844 deletions
diff --git a/services/clipboard/typeregistry.py b/services/clipboard/typeregistry.py
deleted file mode 100644
index eaaf6cb..0000000
--- a/services/clipboard/typeregistry.py
+++ /dev/null
@@ -1,844 +0,0 @@
-import logging
-from gettext import gettext as _
-import urlparse
-import posixpath
-
-class FileType:
- """Generic base class for all classes representing clipboard item formats.
-
- XXX This class's name is misleading; it represents a clipboard item
- format and not a file type per se. Perhaps it should be renamed to
- ClipboardItemFormat?
- """
-
- def __init__(self, formats):
- """Initializer for this class (and all subclasses).
-
- formats -- A dictionary of key-value pairs where the keys are MIME type
- strings and the data values are the clipboard data in each
- respective format. A reference to this dictionary is stored within
- the object for possible use later.
-
- This initializer is invoked when the clipboard item format object is
- instantiated by the TypeRegistry class's get_type method.
-
- """
- self._formats = formats
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- This base-class implementation raises a NotImplementedError exception.
-
- returns A localized string containing the clipboard item format name.
- """
- raise NotImplementedError
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- This base-class implementation raises a NotImplementedError exception.
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- raise NotImplementedError
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- This base-class implementation raises a NotImplementedError exception.
-
- returns A string containing the item preview.
- """
- raise NotImplementedError
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- This base-class implementation raises a NotImplementedError exception.
-
- returns A string containing the activity identifier.
- """
- raise NotImplementedError
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This base-class implementation currently raises a
- NotImplementedError exception, but could (and should) be rewritten to
- handle this functionality for *all* subclasses, since the code is
- identical for all or most subclasses anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- raise NotImplementedError
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class TextFileType(FileType):
- """Represents the text clipboard item format.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['text/plain', 'UTF8_STRING', 'STRING'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Text snippet')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-text'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- For the text file format, this returns a text string containing up to
- 49 characters of the actual item's text.
-
- returns A preview string containing up to 49 characters of the item's
- text.
- """
- for format, data in self._formats.iteritems():
- if format in TextFileType._types:
- text = data.get_data()
- if len(text) < 50:
- return text
- else:
- return text[0:49] + "..."
-
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return 'org.laptop.AbiWordActivity'
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class ImageFileType(FileType):
- """Represents the "image" clipboard item format.
-
- This clipboard item format represents *any* image format, including JPEG,
- GIF, PNG and TIFF formats.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['image/jpeg', 'image/gif', 'image/png', 'image/tiff'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Image')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-image'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return ''
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class UriFileType(FileType):
- """Represents the URI clipboard item format.
-
- Not to be confused with the multiple-URI UriListFileType class.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['_NETSCAPE_URL'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Web Page')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-link'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- For the URI clipboard item format, this is the URI itself.
-
- returns A string containing the item preview, in this case the URI itself.
- """
- for format, data in self._formats.iteritems():
- if format in UriFileType._types:
- string = data.get_data()
- title = string.split("\n")[1]
- return title
-
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return ''
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class PdfFileType(FileType):
- """Represents the PDF clipboard item format.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['application/pdf', 'application/x-pdf'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('PDF file')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-text'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return 'org.laptop.sugar.Xbook'
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class MsWordFileType(FileType):
- """Represents the MS Word clipboard item format (*cringe*).
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['application/msword'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('MS Word file')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-text'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return 'org.laptop.AbiWordActivity'
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class RtfFileType(TextFileType):
- """Represents the RTF clipboard item format (a subclass of TextFileType).
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['application/rtf', 'text/rtf'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('RTF file')
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class AbiwordFileType(TextFileType):
- """Represents the AbiWord clipboard item format.
-
- (XXX This class's name is misleading; it represents a clipboard item format,
- not a file type per se.)
- (XXX AbiWord format is a full word processing format, like the OO Text and MS Word
- formats, and should not be a subclass of TextFileType! Otherwise the OO Text and
- MS Word format types should also be made subclasses of TextFileType.)
- """
-
- _types = set(['application/x-abiword'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Abiword file')
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class SqueakProjectFileType(FileType):
- """Represents the Squeak Project clipboard item format.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['application/x-squeak-project'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Squeak project')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-squeak-project'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return 'org.vpri.EtoysActivity'
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class OOTextFileType(FileType):
- """Represents the OpenDocument Text (OpenOffice.org Writer) clipboard item format.
-
- Note to the uninitiated: OpenDocument Text is a full word processing format,
- not a simple text file.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['application/vnd.oasis.opendocument.text'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('OpenOffice text file')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:object-text'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return 'org.laptop.AbiWordActivity'
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class UriListFileType(FileType):
- """Represents the URI-list clipboard item format.
-
- Not to be confused with the single-URI UriFileType class.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['text/uri-list'])
-
- def _is_image(self):
- """Determines whether this URI list represents an image.
-
- Called by the get_name and get_icon methods. For this URI list to be
- considered to represent an image, it must fulfil two criteria: (1) it
- must have only one URI in it, and (2) the URI must end with an extension
- indicating an image type (currently ".jpg", ".jpeg", ".gif", ".png", or
- ".svg").
-
- returns True if there is one URI in the list and it represents an image,
- False otherwise.
- """
- uris = self._formats['text/uri-list'].get_data().split('\n')
- if len(uris) == 1:
- uri = urlparse.urlparse(uris[0])
- ext = posixpath.splitext(uri[2])[1]
- # FIXME: Bad hack, the type registry should treat text/uri-list as a special case.
- if ext in ['.jpg', '.jpeg', '.gif', '.png', '.svg']:
- return True
-
- return False
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- if self._is_image():
- return _('Image')
- else:
- return _('File')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- if self._is_image():
- return 'theme:object-image'
- else:
- return 'theme:stock-missing'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return ''
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class XoFileType(FileType):
- """Represents the "xo" (OLPC package) clipboard item format.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
-
- _types = set(['application/vnd.olpc-x-sugar'])
-
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Activity package')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:stock-missing'
-
- def get_preview(self):
- """Returns an appropriate preview of the clipboard item data for this item format.
-
- XXX Currently returns an empty string.
-
- returns A string containing the item preview.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- returns A string containing the activity identifier.
- """
- return ''
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- XXX This subclass method is unnecessary; a single base class method
- in the FileType class would be sufficient to handle all or most
- subclasses, since the code is identical for all or most subclasses
- anyway.
-
- returns True if this class handles the given MIME type, False otherwise.
- """
- return mime_type in cls._types
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class UnknownFileType(FileType):
- """Represents an unknown clipboard item format.
-
- XXX This class's name is misleading; it represents a clipboard item format
- and not a file type per se.
- """
- def get_name(self):
- """Returns a localized human-readable name for this clipboard item format.
-
- Since this clipboard item format is unknown, the format name will be
- simply "Object" or something to that effect.
-
- returns A localized string containing the clipboard item format name.
- """
- return _('Object')
-
- def get_icon(self):
- """XXX Returns a "tag" to be used to get an icon for this clipboard item format (I think).
-
- returns XXX A string "tag" to be used to get the icon for this clipboard
- item format (I think).
- """
- return 'theme:stock-missing'
-
- def get_preview(self):
- """Returns a "preview" for this clipboard item format.
-
- Since this clipboard item format is unknown, there can be no preview for
- it, so the "preview" will be an empty string.
-
- returns An empty string, since there can be no preview for an unknown
- clipboard item format.
- """
- return ''
-
- def get_activity(self):
- """Returns the activity identifier associated with this clipboard item format.
-
- Since this clipboard item format is unknown, there can be no activity
- associated with it, so the activity identifier will be an empty string.
-
- returns A string containing the activity identifier (an empty string in
- this case).
- """
- return ''
-
- def matches_mime_type(cls, mime_type):
- """Class method to determine whether this class handles a given MIME type.
-
- mime_type -- A string containing the MIME type.
-
- Always returns true, since UnknownFileType is the clipboard item format
- class of last resort and must be used if no other class handles the
- given MIME type.
-
- returns True if this class handles the given MIME type (always true in
- this case).
- """
- return true
-
- matches_mime_type = classmethod(matches_mime_type)
-
-
-class TypeRegistry:
- """Represents a registry of all clipboard item formats.
-
- There will be one single global instantiation of this object, accessible via
- the global typeregistry.get_instance method.
- """
- def __init__(self):
- """Initializes the registry.
- """
- self._types = []
- self._types.append(PdfFileType)
- self._types.append(MsWordFileType)
- self._types.append(RtfFileType)
- self._types.append(OOTextFileType)
- self._types.append(UriListFileType)
- self._types.append(UriFileType)
- self._types.append(ImageFileType)
- self._types.append(AbiwordFileType)
- self._types.append(TextFileType)
- self._types.append(SqueakProjectFileType)
- self._types.append(XoFileType)
-
- def get_type(self, formats):
- """Returns a matching clipboard item format object for the passed-in clipboard data.
-
- formats -- A dictionary of key-value pairs where the keys are MIME type
- strings and the data values are the clipboard data in each
- respective format.
-
- A reference to the given clipboard data format dictionary is stored
- within the returned object for possible use later.
-
- XXX The order of the clipboard item formats in the TypeRegistry object's
- internal list matters. For example, if clipboard item data is available
- in both MS Word and OO Text formats, the MS Word type will currently be
- matched first, and therefore an MsWordFileType object will be returned.
- Is this really what is desired? The ordering should definitely be given
- some thought.
-
- returns A clipboard item format object of a type matching one of the
- MIME type keys in the formats dictionary, or an UnknownFileType
- object if none of the other types is appropriate.
- """
- for file_type in self._types:
- for format, data in formats.iteritems():
- if file_type.matches_mime_type(format):
- return file_type(formats)
-
- return UnknownFileType(formats)
-
-_type_registry = None
-def get_instance():
- """Returns the global clipboard item format registry object (global method).
-
- Returns a reference to the global clipboard item format registry object,
- instantiating it first if necessary.
-
- returns A TypeRegistry object representing the global clipboard item format
- registry.
- """
- global _type_registry
- if not _type_registry:
- _type_registry = TypeRegistry()
- return _type_registry