Save the extracted cards as each file is completed.

master
Pacman Ghost 7 years ago
parent 5e7c127303
commit eb0939e010
  1. 2
      asl_cards/db.py
  2. 5
      asl_cards/parse.py
  3. 14
      startup_widget.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 )

@ -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." )

@ -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) :

Loading…
Cancel
Save