mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 20:34:37 +03:00
Data layer restructuring (#997)
* Move query builders to sqlite package * Add transaction system * Wrap model resolvers in transaction * Add error return value for StringSliceToIntSlice * Update/refactor mutation resolvers * Convert query builders * Remove unused join types * Add stash id unit tests * Use WAL journal mode
This commit is contained in:
@@ -2,12 +2,12 @@ package manager
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/stashapp/stash/pkg/database"
|
||||
"github.com/stashapp/stash/pkg/ffmpeg"
|
||||
"github.com/stashapp/stash/pkg/logger"
|
||||
"github.com/stashapp/stash/pkg/models"
|
||||
@@ -17,6 +17,7 @@ type GenerateScreenshotTask struct {
|
||||
Scene models.Scene
|
||||
ScreenshotAt *float64
|
||||
fileNamingAlgorithm models.HashAlgorithm
|
||||
txnManager models.TransactionManager
|
||||
}
|
||||
|
||||
func (t *GenerateScreenshotTask) Start(wg *sync.WaitGroup) {
|
||||
@@ -60,39 +61,31 @@ func (t *GenerateScreenshotTask) Start(wg *sync.WaitGroup) {
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.TODO()
|
||||
tx := database.DB.MustBeginTx(ctx, nil)
|
||||
if err := t.txnManager.WithTxn(context.TODO(), func(r models.Repository) error {
|
||||
qb := r.Scene()
|
||||
updatedTime := time.Now()
|
||||
updatedScene := models.ScenePartial{
|
||||
ID: t.Scene.ID,
|
||||
UpdatedAt: &models.SQLiteTimestamp{Timestamp: updatedTime},
|
||||
}
|
||||
|
||||
qb := models.NewSceneQueryBuilder()
|
||||
updatedTime := time.Now()
|
||||
updatedScene := models.ScenePartial{
|
||||
ID: t.Scene.ID,
|
||||
UpdatedAt: &models.SQLiteTimestamp{Timestamp: updatedTime},
|
||||
}
|
||||
if err := SetSceneScreenshot(checksum, coverImageData); err != nil {
|
||||
return fmt.Errorf("Error writing screenshot: %s", err.Error())
|
||||
}
|
||||
|
||||
if err := SetSceneScreenshot(checksum, coverImageData); err != nil {
|
||||
logger.Errorf("Error writing screenshot: %s", err.Error())
|
||||
tx.Rollback()
|
||||
return
|
||||
}
|
||||
// update the scene cover table
|
||||
if err := qb.UpdateCover(t.Scene.ID, coverImageData); err != nil {
|
||||
return fmt.Errorf("Error setting screenshot: %s", err.Error())
|
||||
}
|
||||
|
||||
// update the scene cover table
|
||||
if err := qb.UpdateSceneCover(t.Scene.ID, coverImageData, tx); err != nil {
|
||||
logger.Errorf("Error setting screenshot: %s", err.Error())
|
||||
tx.Rollback()
|
||||
return
|
||||
}
|
||||
// update the scene with the update date
|
||||
_, err = qb.Update(updatedScene)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error updating scene: %s", err.Error())
|
||||
}
|
||||
|
||||
// update the scene with the update date
|
||||
_, err = qb.Update(updatedScene, tx)
|
||||
if err != nil {
|
||||
logger.Errorf("Error updating scene: %s", err.Error())
|
||||
tx.Rollback()
|
||||
return
|
||||
}
|
||||
|
||||
if err := tx.Commit(); err != nil {
|
||||
logger.Errorf("Error setting screenshot: %s", err.Error())
|
||||
return
|
||||
return nil
|
||||
}); err != nil {
|
||||
logger.Error(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user