@@ -61,8 +61,8 @@ func New(dbRootDir, sdRootDir string, updatingMD bool, opts *KuOptions, vers str
6161 k .BKRootDir = sdRootDir
6262 k .ContentIDprefix = sdPrefix
6363 }
64-
6564 k .Passwords = newUncagedPassword (k .KuConfig .PasswordList )
65+ k .UpdatedMetadata = make (map [string ]struct {}, 0 )
6666 headerStr := "Kobo-UNCaGED " + vers
6767 if k .useSDCard {
6868 headerStr += "\n Using SD Card"
@@ -106,6 +106,7 @@ func New(dbRootDir, sdRootDir string, updatingMD bool, opts *KuOptions, vers str
106106 if err = k .readUpdateMDfile (); err != nil {
107107 return nil , fmt .Errorf ("New: failed to read updated metadata file: %w" , err )
108108 }
109+ os .Remove (filepath .Join (k .BKRootDir , kuUpdatedMDfile ))
109110
110111 return k , err
111112}
@@ -569,15 +570,12 @@ func (k *Kobo) SaveCoverImage(contentID string, size image.Point, imgB64 string)
569570
570571// UpdateNickelDB updates the Nickel database with updated metadata obtained from a previous run,
571572// or this run if updating via triggers
572- func (k * Kobo ) UpdateNickelDB () error {
573- if ! k .KuConfig .AddMetadataByTrigger {
574- // No matter what happens, we remove the 'metadata_update.kobouc' file when we're done
575- defer os .Remove (filepath .Join (k .BKRootDir , kuUpdatedMDfile ))
576- }
573+ func (k * Kobo ) UpdateNickelDB () (bool , error ) {
574+ rerun := false
577575 var err error
578576 tx , err := k .nickelDB .Begin ()
579577 if err != nil {
580- return fmt .Errorf ("UpdateNickelDB: Error beginning transaction: %w" , err )
578+ return rerun , fmt .Errorf ("UpdateNickelDB: Error beginning transaction: %w" , err )
581579 }
582580 // Insert prepared statement if using triggers
583581 var insertStmt * sql.Stmt
@@ -588,7 +586,7 @@ func (k *Kobo) UpdateNickelDB() error {
588586 insertStmt , err = tx .Prepare (insertQuery )
589587 if err != nil {
590588 tx .Rollback ()
591- return fmt .Errorf ("UpdateNickelDB: prepared insert statement failed: %w" , err )
589+ return rerun , fmt .Errorf ("UpdateNickelDB: prepared insert statement failed: %w" , err )
592590 }
593591 }
594592 // Update statment for books already in the content table
@@ -602,12 +600,12 @@ func (k *Kobo) UpdateNickelDB() error {
602600 updateStmt , err := tx .Prepare (updateQuery )
603601 if err != nil {
604602 tx .Rollback ()
605- return fmt .Errorf ("UpdateNickelDB: prepared statement failed: %w" , err )
603+ return rerun , fmt .Errorf ("UpdateNickelDB: prepared statement failed: %w" , err )
606604 }
607605 var updateErr error
608606 var desc , series , seriesNum * string
609607 var seriesNumFloat * float64
610- for _ , cid := range k .UpdatedMetadata {
608+ for cid := range k .UpdatedMetadata {
611609 desc , series , seriesNum , seriesNumFloat = nil , nil , nil , nil
612610 if k .MetadataMap [cid ].Comments != nil && * k .MetadataMap [cid ].Comments != "" {
613611 desc = k .MetadataMap [cid ].Comments
@@ -627,17 +625,26 @@ func (k *Kobo) UpdateNickelDB() error {
627625 if err != nil {
628626 updateErr = fmt .Errorf ("UpdateNickelDB: %w" , err )
629627 }
630- } else if k .KuConfig .AddMetadataByTrigger {
631- _ , err = insertStmt .Exec (cid , desc , series , seriesNum )
632- if err != nil {
633- updateErr = fmt .Errorf ("UpdateNickelDB: %w" , err )
628+ delete (k .UpdatedMetadata , cid )
629+ } else {
630+ rerun = true
631+ if k .KuConfig .AddMetadataByTrigger {
632+ _ , err = insertStmt .Exec (cid , desc , series , seriesNum )
633+ if err != nil {
634+ updateErr = fmt .Errorf ("UpdateNickelDB: %w" , err )
635+ }
636+ delete (k .UpdatedMetadata , cid )
634637 }
635638 }
636639 }
637640 if err = tx .Commit (); err != nil {
638- return fmt .Errorf ("UpdateNickelDB: Error committing transaction: %w" , err )
641+ return rerun , fmt .Errorf ("UpdateNickelDB: Error committing transaction: %w" , err )
642+ }
643+ // Note, this should only write to the file if new books are added, and AddMetadataByTrigger is false
644+ if err = k .WriteUpdateMDfile (); err != nil {
645+ return false , fmt .Errorf ("UpdateNickelDB: %w" , err )
639646 }
640- return updateErr
647+ return rerun , updateErr
641648}
642649
643650// Close the kobo object when we're finished with it
0 commit comments