node build fixed
This commit is contained in:
135
seanime-2.9.10/internal/database/db/chapter_downloader_queue.go
Normal file
135
seanime-2.9.10/internal/database/db/chapter_downloader_queue.go
Normal file
@@ -0,0 +1,135 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"gorm.io/gorm"
|
||||
"seanime/internal/database/models"
|
||||
)
|
||||
|
||||
func (db *Database) GetChapterDownloadQueue() ([]*models.ChapterDownloadQueueItem, error) {
|
||||
var res []*models.ChapterDownloadQueueItem
|
||||
err := db.gormdb.Find(&res).Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to get chapter download queue")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (db *Database) GetNextChapterDownloadQueueItem() (*models.ChapterDownloadQueueItem, error) {
|
||||
var res models.ChapterDownloadQueueItem
|
||||
err := db.gormdb.Where("status = ?", "not_started").First(&res).Error
|
||||
if err != nil {
|
||||
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to get next chapter download queue item")
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (db *Database) DequeueChapterDownloadQueueItem() (*models.ChapterDownloadQueueItem, error) {
|
||||
// Pop the first item from the queue
|
||||
var res models.ChapterDownloadQueueItem
|
||||
err := db.gormdb.Where("status = ?", "downloading").First(&res).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = db.gormdb.Delete(&res).Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to delete chapter download queue item")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (db *Database) InsertChapterDownloadQueueItem(item *models.ChapterDownloadQueueItem) error {
|
||||
|
||||
// Check if the item already exists
|
||||
var existingItem models.ChapterDownloadQueueItem
|
||||
err := db.gormdb.Where("provider = ? AND media_id = ? AND chapter_id = ?", item.Provider, item.MediaID, item.ChapterID).First(&existingItem).Error
|
||||
if err == nil {
|
||||
db.Logger.Debug().Msg("db: Chapter download queue item already exists")
|
||||
return errors.New("chapter is already in the download queue")
|
||||
}
|
||||
|
||||
if item.ChapterID == "" {
|
||||
return errors.New("chapter ID is empty")
|
||||
}
|
||||
if item.Provider == "" {
|
||||
return errors.New("provider is empty")
|
||||
}
|
||||
if item.MediaID == 0 {
|
||||
return errors.New("media ID is empty")
|
||||
}
|
||||
if item.ChapterNumber == "" {
|
||||
return errors.New("chapter number is empty")
|
||||
}
|
||||
|
||||
err = db.gormdb.Create(item).Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to insert chapter download queue item")
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *Database) UpdateChapterDownloadQueueItemStatus(provider string, mId int, chapterId string, status string) error {
|
||||
err := db.gormdb.Model(&models.ChapterDownloadQueueItem{}).
|
||||
Where("provider = ? AND media_id = ? AND chapter_id = ?", provider, mId, chapterId).
|
||||
Update("status", status).Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to update chapter download queue item status")
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *Database) GetMediaQueuedChapters(mediaId int) ([]*models.ChapterDownloadQueueItem, error) {
|
||||
var res []*models.ChapterDownloadQueueItem
|
||||
err := db.gormdb.Where("media_id = ?", mediaId).Find(&res).Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to get media queued chapters")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (db *Database) ClearAllChapterDownloadQueueItems() error {
|
||||
err := db.gormdb.
|
||||
Where("status = ? OR status = ? OR status = ?", "not_started", "downloading", "errored").
|
||||
Delete(&models.ChapterDownloadQueueItem{}).
|
||||
Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to clear all chapter download queue items")
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *Database) ResetErroredChapterDownloadQueueItems() error {
|
||||
err := db.gormdb.Model(&models.ChapterDownloadQueueItem{}).
|
||||
Where("status = ?", "errored").
|
||||
Update("status", "not_started").Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to reset errored chapter download queue items")
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *Database) ResetDownloadingChapterDownloadQueueItems() error {
|
||||
err := db.gormdb.Model(&models.ChapterDownloadQueueItem{}).
|
||||
Where("status = ?", "downloading").
|
||||
Update("status", "not_started").Error
|
||||
if err != nil {
|
||||
db.Logger.Error().Err(err).Msg("db: Failed to reset downloading chapter download queue items")
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user