Skip to content

Commit f6f361f

Browse files
committed
Update SeriesID field
1 parent b340355 commit f6f361f

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

kobo-uncaged/device/device.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ func (k *Kobo) UpdateIfExists(cID string, len int) error {
233233
}
234234
if err = tx.Commit(); err != nil {
235235
return fmt.Errorf("UpdateIfExists: Error committing transaction: %w", err)
236-
}
236+
}
237237
}
238238
return nil
239239
}
@@ -594,7 +594,7 @@ func (k *Kobo) UpdateNickelDB() (bool, error) {
594594
var seriesNumFloat *float64
595595
tx, err := k.nickelDB.Begin()
596596
if err != nil {
597-
return rerun, fmt.Errorf("UpdateNickelDB: Error beginning transaction: %w", err)
597+
return rerun, fmt.Errorf("UpdateNickelDB: Error beginning SeriesID transaction: %w", err)
598598
}
599599
// Get Series and SeriesID from the DB for non-sideloaded books
600600
getSeriesQ := `
@@ -630,18 +630,30 @@ func (k *Kobo) UpdateNickelDB() (bool, error) {
630630
}
631631
for s, sID := range k.SeriesIDMap {
632632
if _, err = seriesIDstmt.Exec(sID, s); err != nil {
633-
updateErr = fmt.Errorf("UpdateNickelDB: %w", err)
633+
tx.Rollback()
634+
return rerun, fmt.Errorf("UpdateNickelDB: %w", err)
634635
}
635636
}
637+
if err = tx.Commit(); err != nil {
638+
return rerun, fmt.Errorf("UpdateNickelDB: Error committing SeriesID transaction: %w", err)
639+
}
640+
636641
// Once we've done that, also check if there are still empty SeriesID columns that have Series set,
637642
// and update if required. This shouldn't have much, if any, effect if KU has been run before, or
638643
// the device has been connected to calibre
639644
seriesIDQuery = `
640645
UPDATE content SET SeriesID=Series
641646
WHERE ContentType == 6 AND (Series IS NOT NULL OR Series != '') AND (SeriesID IS NULL OR SeriesID == '');`
642-
if _, err = tx.Exec(seriesIDQuery); err != nil {
643-
updateErr = fmt.Errorf("UpdateNickelDB: %w", err)
647+
if _, err = k.nickelDB.Exec(seriesIDQuery); err != nil {
648+
return rerun, fmt.Errorf("UpdateNickelDB: %w", err)
644649
}
650+
651+
// Begin a new transaction for updating metadata
652+
tx, err = k.nickelDB.Begin()
653+
if err != nil {
654+
return rerun, fmt.Errorf("UpdateNickelDB: Error beginning update transaction: %w", err)
655+
}
656+
645657
// Prepare database with some statements
646658
// Insert prepared statement if using triggers
647659
var insertStmt *sql.Stmt
@@ -687,20 +699,21 @@ func (k *Kobo) UpdateNickelDB() (bool, error) {
687699
seriesNum = &sn
688700
seriesNumFloat = k.MetadataMap[cid].SeriesIndex
689701
}
690-
// Note, not rolling back transaction on error. Is this allowed?
691-
// Don't want one bad update to derail the whole thing, hence avoiding rollback
702+
// We rollback on any sort of error, to lessen any chance of database corruption
692703
if _, ok := k.BooksInDB[cid]; ok {
693704
_, err = updateStmt.Exec(desc, series, seriesNum, seriesNumFloat, seriesID, cid)
694705
if err != nil {
695-
updateErr = fmt.Errorf("UpdateNickelDB: %w", err)
706+
tx.Rollback()
707+
return rerun, fmt.Errorf("UpdateNickelDB: %w", err)
696708
}
697709
delete(k.UpdatedMetadata, cid)
698710
} else {
699711
rerun = true
700712
if k.KuConfig.AddMetadataByTrigger {
701713
_, err = insertStmt.Exec(cid, desc, series, seriesNum, seriesNumFloat, seriesID)
702714
if err != nil {
703-
updateErr = fmt.Errorf("UpdateNickelDB: %w", err)
715+
tx.Rollback()
716+
return rerun, fmt.Errorf("UpdateNickelDB: %w", err)
704717
}
705718
delete(k.UpdatedMetadata, cid)
706719
}

0 commit comments

Comments
 (0)