Merge branch 'master' of git://git.assembla.com/fpdb-gimick

This commit is contained in:
Worros 2010-09-05 11:56:37 +08:00
commit 5460a9d8b2
3 changed files with 59 additions and 22 deletions

View File

@ -142,12 +142,12 @@ class GuiBulkImport():
"""returns the vbox of this thread"""
return self.vbox
def __init__(self, settings, config, parent, sql = None):
def __init__(self, settings, config, sql = None, parent = None):
self.settings = settings
self.config = config
self.parent = parent
self.importer = fpdb_import.Importer(self, self.settings, config,parent, sql)
self.importer = fpdb_import.Importer(self, self.settings, config, sql, parent)
self.vbox = gtk.VBox(False, 0)
self.vbox.show()

View File

@ -999,7 +999,7 @@ class fpdb:
def tab_bulk_import(self, widget, data=None):
"""opens a tab for bulk importing"""
new_import_thread = GuiBulkImport.GuiBulkImport(self.settings, self.config, self.window, self.sql)
new_import_thread = GuiBulkImport.GuiBulkImport(self.settings, self.config, self.sql, self.window)
self.threads.append(new_import_thread)
bulk_tab=new_import_thread.get_vbox()
self.add_and_display_tab(bulk_tab, _("Bulk Import"))

View File

@ -70,7 +70,7 @@ else:
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
class Importer:
def __init__(self, caller, settings, config, parent, sql = None):
def __init__(self, caller, settings, config, sql = None, parent = None):
"""Constructor"""
self.settings = settings
self.caller = caller
@ -302,15 +302,13 @@ class Importer:
totpartial = 0
toterrors = 0
tottime = 0
progresscount = 0
progressgoal = len(self.filelist)
ProgressDialog = ProgressBar(self.parent)
#prepare progress popup window
ProgressDialog = ProgressBar(len(self.filelist), self.parent)
for file in self.filelist:
progresscount += 1
ProgressDialog.progress_update(progresscount,progressgoal)
ProgressDialog.progress_update()
(stored, duplicates, partial, errors, ttime) = self.import_file_dict(db, file
,self.filelist[file][0], self.filelist[file][1], q)
@ -319,11 +317,12 @@ class Importer:
totpartial += partial
toterrors += errors
del ProgressDialog
for i in xrange( self.settings['threads'] ):
print _("sending finish message queue length ="), q.qsize()
db.send_finish_msg(q)
del ProgressDialog
return (totstored, totdups, totpartial, toterrors)
# end def importFiles
@ -543,24 +542,62 @@ class Importer:
class ProgressBar:
"""
Popup window to show progress
Init method sets up total number of expected iterations
If no parent is passed to init, command line
mode assumed, and does not create a progress bar
"""
def __del__(self):
self.progress.destroy()
def progress_update(self, fraction, sum):
if self.parent:
self.progress.destroy()
progresspercent = float(fraction) / (float(sum) + 1.0)
self.pbar.set_fraction(progresspercent)
self.pbar.set_text(str(fraction) + " / " + str(sum))
def progress_update(self):
def __init__(self, parent):
if not self.parent:
#nothing to do
return
self.fraction += 1
#update sum if fraction exceeds expected total number of iterations
if self.fraction > self.sum:
sum = self.fraction
#progress bar total set to 1 plus the number of items,to prevent it
#reaching 100% prior to processing fully completing
progress_percent = float(self.fraction) / (float(self.sum) + 1.0)
progress_text = (self.title + " "
+ str(self.fraction) + " / " + str(self.sum))
self.pbar.set_fraction(progress_percent)
self.pbar.set_text(progress_text)
def __init__(self, sum, parent):
self.parent = parent
if not self.parent:
#no parent is passed, assume this is being run from the
#command line, so return immediately
return
self.fraction = 0
self.sum = sum
self.title = _("Importing")
self.progress = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.progress.set_resizable(False)
self.progress.set_modal(True)
self.progress.set_transient_for(parent)
self.progress.set_decorated(False)
self.progress.set_transient_for(self.parent)
self.progress.set_decorated(True)
self.progress.set_deletable(False)
self.progress.set_title(self.title)
vbox = gtk.VBox(False, 5)
vbox.set_border_width(10)