From eb0939e01053942c493c82f5841915f48e21de9f Mon Sep 17 00:00:00 2001 From: Taka Date: Tue, 2 May 2017 07:09:45 +0000 Subject: [PATCH] Save the extracted cards as each file is completed. --- asl_cards/db.py | 2 -- asl_cards/parse.py | 5 ++++- startup_widget.py | 14 +++++++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/asl_cards/db.py b/asl_cards/db.py index 8dd2a8a..8f953fb 100644 --- a/asl_cards/db.py +++ b/asl_cards/db.py @@ -90,8 +90,6 @@ def open_database( fname , create ) : def add_cards( cards ) : """Build the database from the specified cards.""" - # clear the database - db_session.query(AslCard).delete() # add the cards for c in cards : db_session.add( c ) diff --git a/asl_cards/parse.py b/asl_cards/parse.py index e5bd965..400fa64 100644 --- a/asl_cards/parse.py +++ b/asl_cards/parse.py @@ -77,11 +77,12 @@ def _run_ghostscript( args ) : class PdfParser: - def __init__( self , index_dir , progress=None , progress2=None , on_ask=None , on_error=None ) : + def __init__( self , index_dir , progress=None , progress2=None , on_file_completed=None , on_ask=None , on_error=None ) : # initialize self.index_dir = index_dir self.progress = progress # nb: for tracking file progress self.progress2 = progress2 # nb: for tracking page progress within a file + self.on_file_completed = on_file_completed # nb: called at the end of each file self.on_ask = on_ask # nb: for asking the user something during processing self.on_error = on_error # nb: for showing the user an error message self.cancelling = False @@ -116,6 +117,8 @@ class PdfParser: ) ) continue + if self.on_file_completed : + self.on_file_completed( fname , file_cards ) if file_cards : cards.extend( file_cards ) self._progress( 1.0 , "Done." ) diff --git a/startup_widget.py b/startup_widget.py index fa63921..3490e85 100644 --- a/startup_widget.py +++ b/startup_widget.py @@ -33,19 +33,27 @@ class AnalyzeThread( QThread ) : # initialize if os.path.isfile( self.db_fname ) : os.unlink( self.db_fname ) + db.open_database( self.db_fname , True ) # parse the files + total_cards = 0 + def on_file_completed( fname , cards ) : + # save the extracted cards + db.add_cards( cards ) + nonlocal total_cards + total_cards += len(cards) + del cards[:] self.parser = PdfParser( os.path.join( globals.base_dir , "index" ) , progress = lambda pval,msg: self.progress_signal.emit( -1 if pval is None else pval , msg ) , progress2 = lambda pval: self.progress2_signal.emit( pval ) , + on_file_completed = on_file_completed , on_ask = self.on_ask , on_error = self.on_error , ) cards = self.parser.parse( self.cards_dir , image_res=self.image_res ) - if not cards : + assert len(cards) == 0 # nb: on_file_completed() del'ed everything + if total_cards <= 0 : raise RuntimeError( "No cards were found." ) - db.open_database( self.db_fname , True ) - db.add_cards( cards ) except Exception as ex : # notify slots that something went wrong if globals.debug_settings.value("Debug/LogAnalyzeExceptions",type=bool) :