From fb2ef63eee714c283929e79f883d914d2b349146 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Sat, 23 Oct 2004 03:56:48 +0000 Subject: [PATCH] * src/GrampsBSDDB.py: thumbnail handing in the database * src/GrampsDbBase.py: add set_thumbnail_image and get_thumbnail_image in base class * src/GrampsInMemDB.py: saving thumbnail image * src/GrampsCfg.py: create thumbnail image directory * src/ImageSelect.py: use new thumbnail scheme * src/MediaView.py: use new thumbnail scheme * src/ReadGedcom.py: use new thumbnail scheme * src/ReadXML.py: use new thumbnail scheme * src/SelectObject.py: use new thumbnail scheme * src/gramps_main.py: use new thumbnail scheme * src/Utils.py: remove unused tasks * src/RelImage.py: remove unused tasks * src/DateParser.py: fix dates of the format of JAN 2000 svn: r3662 --- ChangeLog | 18 +++++++ src/GrampsBSDDB.py | 37 ++++++++++++++ src/GrampsCfg.py | 1 + src/GrampsDbBase.py | 6 +++ src/GrampsInMemDB.py | 34 +++++++++++++ src/ImageSelect.py | 38 ++++++-------- src/MediaView.py | 30 +++-------- src/ReadGedcom.py | 49 +++++++++++------- src/ReadXML.py | 9 +++- src/RelImage.py | 117 ++----------------------------------------- src/SelectObject.py | 7 ++- src/Utils.py | 21 -------- src/gramps_main.py | 2 +- 13 files changed, 164 insertions(+), 205 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6dace347..fa766a196 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,24 @@ +2004-10-22 Don Allingham + * src/GrampsBSDDB.py: thumbnail handing in the database + * src/GrampsDbBase.py: add set_thumbnail_image and + get_thumbnail_image in base class + * src/GrampsInMemDB.py: saving thumbnail image + * src/GrampsCfg.py: create thumbnail image directory + * src/ImageSelect.py: use new thumbnail scheme + * src/MediaView.py: use new thumbnail scheme + * src/ReadGedcom.py: use new thumbnail scheme + * src/ReadXML.py: use new thumbnail scheme + * src/SelectObject.py: use new thumbnail scheme + * src/gramps_main.py: use new thumbnail scheme + * src/Utils.py: remove unused tasks + * src/RelImage.py: remove unused tasks + 2004-10-22 Alex Roitman * src/plugins/TimeLine.py: Remove old Date.UNDEF usage. +2004-10-21 Don Allingham + * src/DateParser.py: fix dates of the format of JAN 2000 + 2004-10-19 Don Allingham * src/GrampsCfg.py: eliminate unused options * src/gramps.glade: eliminate unused options diff --git a/src/GrampsBSDDB.py b/src/GrampsBSDDB.py index 24e144836..68ec350ff 100644 --- a/src/GrampsBSDDB.py +++ b/src/GrampsBSDDB.py @@ -23,6 +23,7 @@ import os import time import locale +import gtk from RelLib import * from GrampsDbBase import * @@ -55,6 +56,7 @@ class GrampsBSDDB(GrampsDbBase): def dbopen(self,name,dbname): dbmap = dbshelve.DBShelf(self.env) + dbmap.db.set_pagesize(16384) dbmap.open(name, dbname, db.DB_HASH, db.DB_CREATE, 0666) return dbmap @@ -78,6 +80,7 @@ class GrampsBSDDB(GrampsDbBase): self.event_map = self.dbopen(name, "events") self.metadata = self.dbopen(name, "meta") self.person_map = self.dbopen(name, "person") + self.thumb_db = self.dbopen(name, "thumb") self.surnames = db.DB(self.env) self.surnames.set_flags(db.DB_DUP) @@ -151,6 +154,7 @@ class GrampsBSDDB(GrampsDbBase): self.oid_trans.close() self.sid_trans.close() self.pid_trans.close() + self.thumb_db.close() self.env.close() self.undodb.close() @@ -284,3 +288,36 @@ class GrampsBSDDB(GrampsDbBase): return obj else: return None + + def get_thumbnail_image(self,handle): + data = self.thumb_db.get(handle) + if data: + val = gtk.gdk.pixbuf_new_from_data(data[0],gtk.gdk.COLORSPACE_RGB, + data[1],data[2],data[3],data[4], + data[5]) + return val + else: + return None + + def set_thumbnail_image(self,handle,path): + try: + pixbuf = gtk.gdk.pixbuf_new_from_file(path) + w = pixbuf.get_width() + h = pixbuf.get_height() + scale = const.thumbScale / (float(max(w,h))) + + pw = int(w*scale) + ph = int(h*scale) + + pixbuf = pixbuf.scale_simple(pw,ph,gtk.gdk.INTERP_BILINEAR) + self.thumb_db[handle] = ( + pixbuf.get_pixels(), + pixbuf.get_has_alpha(), + pixbuf.get_bits_per_sample(), + pw, + ph, + pixbuf.get_rowstride() + ) + except: + self.thumb_db[handle] = None + diff --git a/src/GrampsCfg.py b/src/GrampsCfg.py index 1f3fe203f..e99264939 100644 --- a/src/GrampsCfg.py +++ b/src/GrampsCfg.py @@ -139,6 +139,7 @@ def loadConfig(): make_path(os.path.expanduser("~/.gramps/filters")) make_path(os.path.expanduser("~/.gramps/plugins")) make_path(os.path.expanduser("~/.gramps/templates")) + make_path(os.path.expanduser("~/.gramps/thumb")) #------------------------------------------------------------------------- # diff --git a/src/GrampsDbBase.py b/src/GrampsDbBase.py index c0a66f27f..34aa66ff2 100644 --- a/src/GrampsDbBase.py +++ b/src/GrampsDbBase.py @@ -1104,6 +1104,12 @@ class GrampsDbBase: return cols + default[len(cols):] else: return cols + + def get_thumbnail_image(self,handle): + return None + + def set_thumbnail_image(self,handle,path): + pass class Transaction: """ diff --git a/src/GrampsInMemDB.py b/src/GrampsInMemDB.py index b263b27dc..553871839 100644 --- a/src/GrampsInMemDB.py +++ b/src/GrampsInMemDB.py @@ -23,6 +23,10 @@ from RelLib import * from GrampsDbBase import * +import os +import md5 +import gtk + #------------------------------------------------------------------------- # # GrampsInMemDB @@ -173,3 +177,33 @@ class GrampsInMemDB(GrampsDbBase): return self.media_map[handle] else: return None + + def _build_thumb_path(self,path): + base = os.path.expanduser('~/.gramps/thumb') + m = md5.md5(path) + return os.path.join(base,m.hexdigest()+'.jpg') + + def get_thumbnail_image(self,handle): + data = self.media_map.get(handle) + if data: + filename = self._build_thumb_path(data[2]) + if not os.path.isfile(filename): + self.set_thumbnail_image(handle,filename) + return gtk.gdk.pixbuf_new_from_file(filename) + else: + return None + + def set_thumbnail_image(self,handle,path): + try: + pixbuf = gtk.gdk.pixbuf_new_from_file(path) + w = pixbuf.get_width() + h = pixbuf.get_height() + scale = const.thumbScale / (float(max(w,h))) + + pw = int(w*scale) + ph = int(h*scale) + + pixbuf = pixbuf.scale_simple(pw,ph,gtk.gdk.INTERP_BILINEAR) + pixbuf.save(self._build_thumb_path(path),"jpeg") + except: + print "Could not create thumbnail for",path diff --git a/src/ImageSelect.py b/src/ImageSelect.py index cdede8349..48593da1d 100644 --- a/src/ImageSelect.py +++ b/src/ImageSelect.py @@ -155,7 +155,7 @@ class ImageSelect: def on_savephoto_clicked(self): """Save the photo in the dataobj object. (Required function)""" global _last_path - + filename = self.fname.get_filename() _last_path = os.path.dirname(filename) @@ -176,9 +176,6 @@ class ImageSelect: already_imported = o break - # fix referenes here - # dna - if (already_imported): oref = RelLib.MediaRef() oref.set_reference_handle(already_imported.get_handle()) @@ -191,8 +188,8 @@ class ImageSelect: description = os.path.basename(filename) mobj.set_description(description) mobj.set_mime_type(mtype) - self.savephoto(mobj) mobj.set_path(filename) + self.savephoto(mobj) self.db.commit_media_object(mobj,trans) self.db.transaction_commit(trans,'Edit Media Objects') @@ -270,9 +267,7 @@ class Gallery(ImageSelect): def on_drag_begin(self,obj,context): if const.dnd_images: handle = self.sel_obj.get_reference_handle() - obj = self.db.get_object_from_handle(handle) - name = Utils.thumb_path(self.db.get_save_path(),obj) - pix = gtk.gdk.pixbuf_new_from_file(name) + pix = self.db.get_thumbnail_image(handle) context.set_icon_pixbuf(pix,0,0) def item_event(self, widget, event=None): @@ -355,9 +350,12 @@ class Gallery(ImageSelect): def savephoto(self, photo): """Save the photo in the dataobj object. (Required function)""" + print "In save photo" self.db.add_object(photo,None) oref = RelLib.MediaRef() oref.set_reference_handle(photo.get_handle()) + print photo.get_handle(), photo.get_path() + self.db.set_thumbnail_image(photo.get_handle(),photo.get_path()) self.dataobj.add_media_reference(oref) def add_thumbnail(self, photo): @@ -371,19 +369,18 @@ class Gallery(ImageSelect): else: import gobject - name = Utils.thumb_path(self.db.get_save_path(),obj) - description = obj.get_description() if len(description) > 20: description = "%s..." % description[0:20] try: - image = gtk.gdk.pixbuf_new_from_file(name) + image = self.db.get_thumbnail_image(oid) + if not image: + image = gtk.gdk.pixbuf_new_from_file(const.icon) except gobject.GError,msg: ErrorDialog(str(msg)) image = gtk.gdk.pixbuf_new_from_file(const.icon) except: - ErrorDialog(_("Thumbnail %s could not be found") % name) image = gtk.gdk.pixbuf_new_from_file(const.icon) x = image.get_width() @@ -473,7 +470,8 @@ class Gallery(ImageSelect): photo.set_description(root) self.savephoto(photo) if GrampsGconfKeys.get_media_reference() == 0: - name = RelImage.import_media_object(name,self.path,photo.get_handle()) + self.db.set_thumbnail_image(photo.get_handle(), + self.path) photo.set_path(name) self.parent.lists_changed = 1 if GrampsGconfKeys.get_media_global(): @@ -499,7 +497,7 @@ class Gallery(ImageSelect): self.dataobj.add_media_reference(oref) try: handle = photo.get_handle() - name = RelImage.import_media_object(tfile,self.path,handle) + self.db.set_thumbnail_image(handle,self.path) photo.set_path(name) except: photo.set_path(tfile) @@ -629,9 +627,7 @@ class Gallery(ImageSelect): leaving it as an external data object.""" photo = obj.get_data('o') obj = self.db.get_object_from_handle(photo.get_reference_handle()) - name = RelImage.import_media_object(obj.get_path(),self.path, - obj.get_handle()) - obj.set_path(name) + self.db.set_thumbnail_image(obj.get_handle(),obj.get_path()) def popup_change_description(self, obj): """Bring up a window allowing the user to edit the description @@ -706,10 +702,8 @@ class LocalMediaProperties: descr_window.set_text(self.obj.get_description()) mtype = self.obj.get_mime_type() - thumb = Utils.thumb_path(path,self.obj) - if os.path.isfile(thumb): - self.pix = gtk.gdk.pixbuf_new_from_file(thumb) - self.pixmap.set_from_pixbuf(self.pix) + self.pix = self.db.get_thumbnail_image(self.obj.get_handle()) + self.pixmap.set_from_pixbuf(self.pix) self.change_dialog.get_widget("private").set_active(photo.get_privacy()) self.change_dialog.get_widget("gid").set_text(self.obj.get_gramps_id()) @@ -938,7 +932,7 @@ class GlobalMediaProperties: self.descr_window.set_text(self.obj.get_description()) mtype = self.obj.get_mime_type() - pb = gtk.gdk.pixbuf_new_from_file(Utils.thumb_path(self.path,self.obj)) + pb = self.db.get_thumbnail_image(self.obj.get_handle()) self.pixmap.set_from_pixbuf(pb) self.change_dialog.get_widget("gid").set_text(self.obj.get_gramps_id()) diff --git a/src/MediaView.py b/src/MediaView.py index 72fb16ab0..c8eb34ea2 100644 --- a/src/MediaView.py +++ b/src/MediaView.py @@ -113,11 +113,6 @@ class MediaView: self.list.connect('button-press-event',self.on_button_press_event) self.list.connect('key-press-event',self.key_press) self.selection.connect('changed',self.on_select_row) - if not RelImage.is_cnv(): - WarningDialog(_("Thumbnails not available") - ,_("There is no suitable tool to generate thumbnails for the images. " - "If you would like to enable this feature, " - "install ImageMagick, available at http://www.imagemagick.org/")) self.columns = [] self.build_columns() self.build_tree() @@ -169,11 +164,9 @@ class MediaView: mobj = self.db.get_object_from_handle(handle) mtype = mobj.get_mime_type() type_name = Utils.get_mime_description(mtype) - path = mobj.get_path() - thumb_path = Utils.thumb_path(self.db.get_save_path(),mobj) - pexists = os.path.exists(path) - if pexists and os.path.exists(thumb_path): - self.preview.set_from_pixbuf(gtk.gdk.pixbuf_new_from_file(thumb_path)) + image = self.db.get_thumbnail_image(mobj.get_handle()) + if image != None: + self.preview.set_from_pixbuf(image) else: icon_image = gtk.gdk.pixbuf_new_from_file(Utils.find_icon(mtype)) self.preview.set_from_pixbuf(icon_image) @@ -256,7 +249,7 @@ class MediaView: def popup_convert_to_private(self, obj): path = self.db.get_save_path() handle = self.obj.get_handle() - name = RelImage.import_media_object(self.obj.get_path(),path,handle) + self.db.set_thumbnail_image(handle,path) if name: self.obj.set_path(name) @@ -346,9 +339,8 @@ class MediaView: return if (const.dnd_images): obj = self.db.get_object_from_handle(store.get_value(node,1)) - name = Utils.thumb_path(self.db.get_save_path(),obj) - pix = gtk.gdk.pixbuf_new_from_file(name) - context.set_icon_pixbuf(pix,0,0) + image = self.db.get_thumbnail_image(obj.get_handle()) + context.set_icon_pixbuf(image,0,0) def on_drag_data_get(self,w, context, selection_data, info, time): if info == 1: @@ -376,11 +368,7 @@ class MediaView: trans = self.db.transaction_begin() self.db.add_object(photo,trans) if GrampsGconfKeys.get_media_reference() == 0: - name = RelImage.import_media_object(name, - self.db.get_save_path(), - photo.get_handle()) - if name: - photo.set_path(name) + self.db.set_thumbnail_image(photo.get_handle(),name) self.db.commit_media_object(photo,trans) self.db.transaction_commit(trans,_("Add Media Object")) @@ -409,9 +397,7 @@ class MediaView: try: handle = photo.get_handle() path = self.db.get_save_path() - name = RelImage.import_media_object(tfile,path,handle) - if name: - photo.set_path(name) + self.db.set_thumbnail_image(handle,path) except: photo.set_path(tfile) return diff --git a/src/ReadGedcom.py b/src/ReadGedcom.py index 68885d53d..479aa53e0 100644 --- a/src/ReadGedcom.py +++ b/src/ReadGedcom.py @@ -184,7 +184,6 @@ def import2(database, filename, cb, codeset, use_trans): try: close = g.parse_gedcom_file(use_trans) - g.resolve_refns() except IOError,msg: Utils.destroy_passed_object(statusWindow) errmsg = _("%s could not be opened\n") % filename @@ -204,12 +203,15 @@ def import2(database, filename, cb, codeset, use_trans): statusTop.get_widget("close").set_sensitive(1) if close: statusWindow.destroy() + + print database.person_map.stat() if cb: statusWindow.destroy() cb(1) elif callback: callback() + print "callback done" #------------------------------------------------------------------------- # @@ -314,7 +316,7 @@ class GedcomParser: f = open("/proc/mounts","r") for line in f.xreadlines(): - paths = string.split(line) + paths = line.split() ftype = paths[2].upper() if ftype in file_systems.keys(): mypaths.append((paths[1],file_systems[ftype])) @@ -355,7 +357,7 @@ class GedcomParser: def find_file(self,fullname,altpath): tries = [] - fullname = string.replace(fullname,'\\','/') + fullname = fullname.replace('\\','/') tries.append(fullname) if os.path.isfile(fullname): @@ -395,7 +397,7 @@ class GedcomParser: self.text = string.translate(self.text,self.transtable2) self.index += 1 - l = string.split(self.text, None, 2) + l = self.text.split(None, 2) ln = len(l) try: if ln == 2: @@ -508,12 +510,12 @@ class GedcomParser: return elif matches[1] == "TITL": title = matches[2] + self.parse_continue_data(level+1) - title = string.replace(title,'\n',' ') + title = title.replace('\n',' ') self.source.set_title(title) elif matches[1] == "TAXT" or matches[1] == "PERI": # EasyTree Sierra On-Line if self.source.get_title() == "": title = matches[2] + self.parse_continue_data(level+1) - title = string.replace(title,'\n',' ') + title = title.replace('\n',' ') self.source.set_title(title) elif matches[1] == "AUTH": self.source.set_author(matches[2] + self.parse_continue_data(level+1)) @@ -628,7 +630,7 @@ class GedcomParser: def find_person_handle(self,gramps_id): intid = self.gid2id.get(gramps_id) if not intid: - intid = Utils.create_id() + intid = create_id() self.gid2id[gramps_id] = intid return intid @@ -646,7 +648,7 @@ class GedcomParser: def find_family_handle(self,gramps_id): intid = self.fid2id.get(gramps_id) if not intid: - intid = Utils.create_id() + intid = create_id() self.fid2id[gramps_id] = intid return intid @@ -656,7 +658,7 @@ class GedcomParser: if self.db.source_map.has_key(intid): source.unserialize(self.db.source_map.get(intid)) else: - intid = Utils.create_id() + intid = create_id() source.set_handle(intid) source.set_gramps_id(gramps_id) self.db.add_source(source,self.trans) @@ -669,7 +671,7 @@ class GedcomParser: if self.db.place_map.has_key(intid): place.unserialize(self.db.place_map.get(intid)) else: - intid = Utils.create_id() + intid = create_id() place.set_handle(intid) place.set_title(gramps_id) place.set_gramps_id(self.db.find_next_place_gramps_id()) @@ -712,11 +714,11 @@ class GedcomParser: return (mrel,frel) # FTW elif matches[1] == "_FREL": - if string.lower(matches[2]) != "natural": - frel = string.capitalize(matches[2]) + if matches[2].lower() != "natural": + frel = matches[2].capitalize() # FTW elif matches[1] == "_MREL": - if string.lower(matches[2]) != "natural": + if matches[2].lower() != "natural": mrel = matches[2] elif matches[1] == "ADOP": mrel = "Adopted" @@ -789,7 +791,7 @@ class GedcomParser: else: self.parse_family_object(2) elif matches[1] == "_COMM": - note = string.strip(matches[2]) + self.parse_continue_data(1) + note = matches[2].strip() + self.parse_continue_data(1) self.family.set_note(note) self.ignore_sub_junk(2) elif matches[1] == "NOTE": @@ -974,7 +976,7 @@ class GedcomParser: if matches[2]: event.set_description(matches[2]) self.parse_person_event(event,2) - n = string.strip(event.get_name()) + n = event.get_name().strip() if n in self.attrs: attr = RelLib.Attribute() attr.set_type(self.gedattr[n]) @@ -1001,7 +1003,7 @@ class GedcomParser: self.ignore_sub_junk(2) else: event = RelLib.Event() - n = string.strip(matches[1]) + n = matches[1].strip() if ged2gramps.has_key(n): event.set_name(ged2gramps[n]) elif self.gedattr.has_key(n): @@ -1033,7 +1035,7 @@ class GedcomParser: self.backup() return note elif matches[1] == "NOTE": - if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": + if not matches[2].strip() or matches[2] and matches[2][0] != "@": note = matches[2] + self.parse_continue_data(level+1) self.parse_note_data(level+1) else: @@ -1050,7 +1052,7 @@ class GedcomParser: if int(matches[0]) < level: self.backup() - return (string.capitalize(ftype),note) + return (ftype.capitalize(),note) elif matches[1] == "PEDI": ftype = matches[2] elif matches[1] == "SOUR": @@ -1059,7 +1061,7 @@ class GedcomParser: elif matches[1] == "_PRIMARY": pass #type = matches[1] elif matches[1] == "NOTE": - if not string.strip(matches[2]) or matches[2] and matches[2][0] != "@": + if not matches[2].strip() or matches[2] and matches[2][0] != "@": note = matches[2] + self.parse_continue_data(level+1) self.parse_note_data(level+1) else: @@ -1949,6 +1951,15 @@ _filter = gtk.FileFilter() _filter.set_name(_('GEDCOM files')) _filter.add_mime_type(_mime_type) + +#------------------------------------------------------------------------- +# +# +# +#------------------------------------------------------------------------- +def create_id(): + return Utils.create_id() + #------------------------------------------------------------------------- # # diff --git a/src/ReadXML.py b/src/ReadXML.py index 7a8cf7b4e..fe0711fd3 100644 --- a/src/ReadXML.py +++ b/src/ReadXML.py @@ -76,7 +76,7 @@ def importData(database, filename, callback=None,cl=0,use_trans=True): database.fmap = {} change = os.path.getmtime(filename) - parser = GrampsParser(database,callback,basefile,change) + parser = GrampsParser(database,callback,basefile,change,filename) if gzip_ok: use_gzip = 1 @@ -273,7 +273,8 @@ def fix_spaces(text_list): #------------------------------------------------------------------------- class GrampsParser: - def __init__(self,database,callback,base,change): + def __init__(self,database,callback,base,change,filename): + self.filename = filename self.stext_list = [] self.scomments_list = [] self.note_list = [] @@ -913,7 +914,11 @@ class GrampsParser: self.object.set_description(attrs['description']) src = attrs["src"] if src: + if src[0] != '/': + fullpath = os.path.abspath(self.filename) + src = os.path.dirname(fullpath) + '/' + src self.object.set_path(src) + self.db.set_thumbnail_image(self.object.get_handle(),src) def stop_people(self,*tag): pass diff --git a/src/RelImage.py b/src/RelImage.py index 9d204ee47..09449ea20 100644 --- a/src/RelImage.py +++ b/src/RelImage.py @@ -40,10 +40,6 @@ from QuestionDialog import ErrorDialog, WarningDialog # #------------------------------------------------------------------------- import const -import Utils -import ImgManip -import GrampsMime - from gettext import gettext as _ #------------------------------------------------------------------------- @@ -59,51 +55,7 @@ def import_media_object(filename,path,base): _("The file has been moved or deleted")) return "" - ext = os.path.splitext(filename)[1] - - mtype = GrampsMime.get_type(filename) - if mtype[0:5] == "image": - name = "%s/%s%s" % (os.path.dirname(path),base,ext) - thumb = "%s/.thumb" % (os.path.dirname(path)) - - try: - if not os.path.exists(thumb): - os.mkdir(thumb) - except IOError,msg: - ErrorDialog(_("Could not create %s") % thumb,str(msg)) - return "" - except: - ErrorDialog(_("Could not create %s") % thumb) - return "" - - try: - path = "%s/%s.jpg" % (thumb,base) - mk_thumb(filename,path,const.thumbScale) - except: - ErrorDialog(_("Error creating the thumbnail: %s")) - return "" - - try: - shutil.copyfile(filename,name) - try: - shutil.copystat(filename,name) - except: - pass - except IOError,msg: - ErrorDialog(_("Error copying %s") % filename,str(msg)) - return "" - - else: - bname = os.path.basename(filename) - l = string.split(bname,'.') - name = "%s/%s.%s" % (path,base,l[-1]) - shutil.copyfile(filename,name) - try: - shutil.copystat(filename,name) - except: - pass - - return name + return filename #------------------------------------------------------------------------- # @@ -124,75 +76,12 @@ def scale_image(path,size): scale = size / float(max(width,height)) try: - return image1.scale_simple(int(scale*width), int(scale*height), gtk.gdk.INTERP_BILINEAR) + return image1.scale_simple(int(scale*width), int(scale*height), + gtk.gdk.INTERP_BILINEAR) except: WarningDialog(_("Cannot display %s") % path, _('GRAMPS is not able to display the image file. ' 'This may be caused by a corrupt file.')) return gtk.gdk.pixbuf_new_from_file(const.icon) -#------------------------------------------------------------------------- -# -# scale_image -# -#------------------------------------------------------------------------- -def mk_thumb(source,dest,size): - directory = os.path.dirname(dest) - - source = os.path.normpath(source) - dest = os.path.normpath(dest) - - try: - if not os.path.exists(directory): - os.mkdir(directory) - except IOError,msg: - ErrorDialog(_("Could not create %s") % directory, str(msg)) - return - except: - ErrorDialog(_("Could not create %s") % directory) - return - - if os.path.exists(dest): - try: - os.remove(dest) - except IOError,msg: - errmsg = _("Could not replace %s") % directory - ErrorDialog(errmsg,msg) - return - - if not os.path.exists(source): - ErrorDialog(_("Could not create a thumbnail for %s") % source, - _("The file has been moved or deleted.")) - - try: - img = ImgManip.ImgManip(source) - img.jpg_thumbnail(dest,size,size) - except: - import sys - ErrorDialog(_("Could not create a thumbnail for %s") % source, - "%s %s" % (sys.exc_type,sys.exc_value)) - return - -#------------------------------------------------------------------------- -# -# scale_image -# -#------------------------------------------------------------------------- -def check_thumb(source,dest,size): - if not os.path.isfile(source): - return 0 - if not os.path.isfile(dest): - mk_thumb(source,dest,size) - elif os.path.getmtime(source) > os.path.getmtime(dest): - mk_thumb(source,dest,size) - return 1 - - -#------------------------------------------------------------------------- -# -# Test if there's convert available -# -#------------------------------------------------------------------------- -def is_cnv(): - return Utils.search_for('convert') diff --git a/src/SelectObject.py b/src/SelectObject.py index bab825637..6684cd1e4 100644 --- a/src/SelectObject.py +++ b/src/SelectObject.py @@ -117,10 +117,9 @@ class SelectObject: the_type = Utils.get_mime_description(obj.get_mime_type()) path = obj.get_path() - thumb_path = Utils.thumb_path(self.db.get_save_path(),obj) - pexists = os.path.exists(path) - if pexists and os.path.exists(thumb_path): - self.preview.set_from_pixbuf(gtk.gdk.pixbuf_new_from_file(thumb_path)) + image = self.db.get_thumbnail_image(obj.get_handle()) + if image: + self.preview.set_from_pixbuf(image) else: icon_image = gtk.gdk.pixbuf_new_from_file(Utils.find_icon(the_type)) self.preview.set_from_pixbuf(icon_image) diff --git a/src/Utils.py b/src/Utils.py index 363431eb2..77c6c2582 100644 --- a/src/Utils.py +++ b/src/Utils.py @@ -331,27 +331,6 @@ def get_mime_description(mime_type): return '' except: return '' - - -#------------------------------------------------------------------------- -# -# -# -#------------------------------------------------------------------------- -def thumb_path(dir,mobj): - mime_type = mobj.get_mime_type() - - if mime_type[0:5] == "image": - thumb = "%s/.thumb/%s.jpg" % (os.path.dirname(dir),mobj.get_gramps_id()) - try: - if RelImage.check_thumb(mobj.get_path(),thumb,const.thumbScale): - return thumb - else: - return find_icon(mime_type) - except: - return find_icon(mime_type) - else: - return find_icon(mime_type) #------------------------------------------------------------------------- # diff --git a/src/gramps_main.py b/src/gramps_main.py index 805bc3568..87f023f71 100755 --- a/src/gramps_main.py +++ b/src/gramps_main.py @@ -1124,9 +1124,9 @@ class Gramps: if response == gtk.RESPONSE_OK: name = choose.get_filename() if os.path.isfile(name): - RelImage.import_media_object(name,filename,base) obj = self.db.get_object_from_handle(ObjectId) obj.set_path(name) + self.db.set_thumbnail_image(ObjectId,name) choose.destroy() #-------------------------------------------------------------------------