Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-07-03 20:42:17 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-07-03 20:42:17 (GMT)
commitcc2b8884c02f70f7a086e3c9aeee0abd42c97135 (patch)
treebded521727e19d6b23449c5cccd28c6ce8469ff1
parentddecddcb420a9f87b203d0f228c6e41b65af5e53 (diff)
Be smarter when choosing one mime type from the targets offered.
-rw-r--r--services/clipboard/clipboardobject.py22
-rw-r--r--shell/view/clipboardmenu.py15
-rw-r--r--sugar/util.py25
3 files changed, 38 insertions, 24 deletions
diff --git a/services/clipboard/clipboardobject.py b/services/clipboard/clipboardobject.py
index d042fb5..133e667 100644
--- a/services/clipboard/clipboardobject.py
+++ b/services/clipboard/clipboardobject.py
@@ -20,6 +20,7 @@ import urlparse
from sugar.objects import mime
from sugar import activity
+from sugar import util
import objecttypeservice
@@ -106,32 +107,21 @@ class ClipboardObject:
return self._formats
def get_mime_type(self):
- logging.debug('Choosing between %r.' % self._formats.keys())
if not self._formats:
return ''
- if 'text/uri-list' in self._formats.keys():
+ format = util.choose_most_significant_mime_type(self._formats.keys())
+
+ if format == 'text/uri-list':
data = self._formats['text/uri-list'].get_data()
uris = data.split('\n')
if len(uris) == 1 or not uris[1]:
uri = urlparse.urlparse(uris[0], 'file')
if uri.scheme == 'file':
logging.debug('Choosed %r!' % mime.get_for_file(uri.path))
- return mime.get_for_file(uri.path)
-
- for mime_category in ['image/', 'text/', 'application/']:
- for mime_type in self._formats.keys():
- if mime_type.startswith(mime_category) and \
- not mime_type.split('/')[1].startswith('_'):
- mime_type = mime_type.split(';')[0]
- logging.debug('Choosed %r!' % mime_type)
- return mime_type
-
- if 'STRING' in self._formats.keys():
- return 'text/plain'
+ format = mime.get_for_file(uri.path)
- logging.debug('Returning first: %r.' % self._formats.keys()[0])
- return self._formats.keys()[0]
+ return format
class Format:
diff --git a/shell/view/clipboardmenu.py b/shell/view/clipboardmenu.py
index 4be17bf..9be8fb8 100644
--- a/shell/view/clipboardmenu.py
+++ b/shell/view/clipboardmenu.py
@@ -13,10 +13,12 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
from gettext import gettext as _
import tempfile
import urlparse
import os
+import logging
import gtk
import hippo
@@ -31,6 +33,7 @@ from sugar.clipboard import clipboardservice
from sugar.datastore import datastore
from sugar.objects import mime
from sugar import profile
+from sugar import util
class ClipboardMenu(Palette):
@@ -151,18 +154,13 @@ class ClipboardMenu(Palette):
cb_service = clipboardservice.get_instance()
obj = cb_service.get_object(self._object_id)
- if len(obj['FORMATS']) == 0:
- return
+ format = util.choose_most_significant_mime_type(obj['FORMATS'])
+ data = cb_service.get_object_data(self._object_id, format)
- if 'text/uri-list' in obj['FORMATS']:
- data = cb_service.get_object_data(self._object_id, 'text/uri-list')
+ if format == 'text/uri-list':
file_path = urlparse.urlparse(data['DATA']).path
mime_type = mime.get_for_file(file_path)
else:
- # TODO: Find a way to choose the best mime-type from all the available.
- mime_type = obj['FORMATS'][0]
-
- data = cb_service.get_object_data(self._object_id, mime_type)
if data['ON_DISK']:
file_path = urlparse.urlparse(data['DATA']).path
else:
@@ -171,6 +169,7 @@ class ClipboardMenu(Palette):
os.write(f, data['DATA'])
finally:
os.close(f)
+ mime_type = format
jobject = datastore.create()
jobject.metadata['title'] = _('Clipboard object: %s.') % obj['NAME']
diff --git a/sugar/util.py b/sugar/util.py
index 7b895be..497eb53 100644
--- a/sugar/util.py
+++ b/sugar/util.py
@@ -22,6 +22,8 @@ import random
import binascii
import string
import os
+import logging
+
from ConfigParser import ConfigParser
from ConfigParser import NoOptionError
@@ -125,3 +127,26 @@ def set_proc_title(title):
return True
except:
return False
+
+def choose_most_significant_mime_type(mime_types):
+ logging.debug('Choosing between %r.' % mime_types)
+ if not mime_types:
+ return ''
+
+ if 'text/uri-list' in mime_types:
+ return 'text/uri-list'
+
+ for mime_category in ['image/', 'text/', 'application/']:
+ for mime_type in mime_types:
+ if mime_type.startswith(mime_category) and \
+ not mime_type.split('/')[1].startswith('_'):
+ mime_type = mime_type.split(';')[0]
+ logging.debug('Choosed %r!' % mime_type)
+ return mime_type
+
+ if 'STRING' in mime_types:
+ return 'text/plain'
+
+ logging.debug('Returning first: %r.' % mime_types[0])
+ return mime_types[0]
+