From bf2f6d6161bc8db60d8a8b69e8db37e64cd61e60 Mon Sep 17 00:00:00 2001 From: IRIE Shinsuke Date: Wed, 19 Feb 2014 15:32:54 +1100 Subject: [PATCH] blender-thumbnailer.py: Fix GVFS support not working with Python 3 also update doc string. --- release/bin/blender-thumbnailer.py | 60 +++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/release/bin/blender-thumbnailer.py b/release/bin/blender-thumbnailer.py index 22e811c538e..91aeb7af2ab 100755 --- a/release/bin/blender-thumbnailer.py +++ b/release/bin/blender-thumbnailer.py @@ -21,10 +21,16 @@ # """ -Thumbnailer runs with python 2.6 and 3.x. -To run automatically with nautilus: - gconftool --type boolean --set /desktop/gnome/thumbnailers/application@x-blender/enable true - gconftool --type string --set /desktop/gnome/thumbnailers/application@x-blender/command "blender-thumbnailer.py %u %o" +Thumbnailer runs with python 2.7 and 3.x. +To run automatically with a file manager such as Nautilus, save this file +in a directory that is listed in PATH environment variable, and create +blender.thumbnailer file in ${HOME}/.local/share/thumbnailers/ directory +with the following contents: + +[Thumbnailer Entry] +TryExec=blender-thumbnailer.py +Exec=blender-thumbnailer.py %u %o +MimeType=application/x-blender; """ import struct @@ -34,21 +40,47 @@ def open_wrapper_get(): """ wrap OS spesific read functionality here, fallback to 'open()' """ - def open_gio(path, mode): - g_file = gio.File(path).read() - g_file.orig_seek = g_file.seek + class GFileWrapper: + __slots__ = ("mode", "g_file") + def __init__(self, url, mode='r'): + self.mode = mode # used in gzip module + self.g_file = Gio.File.parse_name(url).read(None) - def new_seek(offset, whence=0): - return g_file.orig_seek(offset, [1, 0, 2][whence]) + def read(self, size): + return self.g_file.read_bytes(size, None).get_data() - g_file.seek = new_seek - return g_file + def seek(self, offset, whence=0): + self.g_file.seek(offset, [1, 0, 2][whence], None) + return self.g_file.tell() + + def tell(self): + return self.g_file.tell() + + def close(self): + self.g_file.close(None) + + def open_local_url(url, mode='r'): + o = urlparse(url) + if o.scheme == '': + path = o.path + elif o.scheme == 'file': + path = unquote(o.path) + else: + raise(IOError('URL scheme "%s" needs gi.repository.Gio module' % o.scheme)) + return open(path, mode) try: - import gio - return open_gio + from gi.repository import Gio + return GFileWrapper except ImportError: - return open + try: + # Python 3 + from urllib.parse import urlparse, unquote + except ImportError: + # Python 2 + from urlparse import urlparse + from urllib import unquote + return open_local_url def blend_extract_thumb(path):