From facae420cbdc8d070dfc3b2a59112920a0a529f3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 2 Jun 2011 12:38:46 -0600 Subject: [PATCH] Fix #791806 (Metadata causes freeze) --- src/calibre/library/database2.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index a1a012a822..2106fcad8f 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en' The database used to store ebook metadata ''' import os, sys, shutil, cStringIO, glob, time, functools, traceback, re, \ - json, uuid + json, uuid, tempfile import threading, random from itertools import repeat from math import ceil @@ -591,11 +591,13 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): f.write(cdata) for format in formats: # Get data as string (can't use file as source and target files may be the same) - f = self.format(id, format, index_is_id=True, as_file=False) - if not f: + f = self.format(id, format, index_is_id=True, as_file=True) + if f is None: continue - stream = cStringIO.StringIO(f) - self.add_format(id, format, stream, index_is_id=True, + with tempfile.SpooledTemporaryFile(max_size=100*(1024**2)) as stream: + shutil.copyfileobj(f, stream) + stream.seek(0) + self.add_format(id, format, stream, index_is_id=True, path=tpath, notify=False) self.conn.execute('UPDATE books SET path=? WHERE id=?', (path, id)) self.dirtied([id], commit=False)