mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 21:19:18 +00:00
Split long functions and optimize code (#1082)
Co-authored-by: Konstantin Koval
This commit is contained in:
@@ -10,7 +10,8 @@ type MediaCleanupTask struct {
|
||||
scanner_task.ScannerTaskBase
|
||||
}
|
||||
|
||||
func (t MediaCleanupTask) AfterScanAlbum(ctx scanner_task.TaskContext, changedMedia []*models.Media, albumMedia []*models.Media) error {
|
||||
func (t MediaCleanupTask) AfterScanAlbum(ctx scanner_task.TaskContext, changedMedia []*models.Media,
|
||||
albumMedia []*models.Media) error {
|
||||
|
||||
cleanupErrors := CleanupMedia(ctx.GetDB(), ctx.GetAlbum().ID, albumMedia)
|
||||
for _, err := range cleanupErrors {
|
||||
|
||||
@@ -12,7 +12,9 @@ type FaceDetectionTask struct {
|
||||
scanner_task.ScannerTaskBase
|
||||
}
|
||||
|
||||
func (t FaceDetectionTask) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData, updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {
|
||||
func (t FaceDetectionTask) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData,
|
||||
updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {
|
||||
|
||||
didProcess := len(updatedURLs) > 0
|
||||
|
||||
if didProcess && mediaData.Media.Type == models.MediaTypePhoto {
|
||||
|
||||
@@ -42,7 +42,9 @@ func (t NotificationTask) AfterMediaFound(ctx scanner_task.TaskContext, media *m
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t NotificationTask) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData, updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {
|
||||
func (t NotificationTask) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData,
|
||||
updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {
|
||||
|
||||
if len(updatedURLs) > 0 {
|
||||
progress := float64(mediaIndex) / float64(mediaTotal) * 100.0
|
||||
notification.BroadcastNotification(&models.Notification{
|
||||
@@ -57,7 +59,9 @@ func (t NotificationTask) AfterProcessMedia(ctx scanner_task.TaskContext, mediaD
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t NotificationTask) AfterScanAlbum(ctx scanner_task.TaskContext, changedMedia []*models.Media, albumMedia []*models.Media) error {
|
||||
func (t NotificationTask) AfterScanAlbum(ctx scanner_task.TaskContext, changedMedia []*models.Media,
|
||||
albumMedia []*models.Media) error {
|
||||
|
||||
if len(changedMedia) > 0 {
|
||||
timeoutDelay := 2000
|
||||
notification.BroadcastNotification(&models.Notification{
|
||||
|
||||
@@ -29,7 +29,9 @@ type scannerTasks struct {
|
||||
|
||||
var Tasks scannerTasks = scannerTasks{}
|
||||
|
||||
func simpleCombinedTasks(ctx scanner_task.TaskContext, doTask func(ctx scanner_task.TaskContext, task scanner_task.ScannerTask) error) error {
|
||||
func simpleCombinedTasks(ctx scanner_task.TaskContext, doTask func(ctx scanner_task.TaskContext,
|
||||
task scanner_task.ScannerTask) error) error {
|
||||
|
||||
for _, task := range allTasks {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
@@ -85,7 +87,9 @@ func (t scannerTasks) MediaFound(ctx scanner_task.TaskContext, fileInfo fs.FileI
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func (t scannerTasks) AfterScanAlbum(ctx scanner_task.TaskContext, changedMedia []*models.Media, albumMedia []*models.Media) error {
|
||||
func (t scannerTasks) AfterScanAlbum(ctx scanner_task.TaskContext, changedMedia []*models.Media,
|
||||
albumMedia []*models.Media) error {
|
||||
|
||||
return simpleCombinedTasks(ctx, func(ctx scanner_task.TaskContext, task scanner_task.ScannerTask) error {
|
||||
return task.AfterScanAlbum(ctx, changedMedia, albumMedia)
|
||||
})
|
||||
@@ -97,7 +101,9 @@ func (t scannerTasks) AfterMediaFound(ctx scanner_task.TaskContext, media *model
|
||||
})
|
||||
}
|
||||
|
||||
func (t scannerTasks) BeforeProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData) (scanner_task.TaskContext, error) {
|
||||
func (t scannerTasks) BeforeProcessMedia(ctx scanner_task.TaskContext,
|
||||
mediaData *media_encoding.EncodeMediaData) (scanner_task.TaskContext, error) {
|
||||
|
||||
for _, task := range allTasks {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
@@ -115,7 +121,9 @@ func (t scannerTasks) BeforeProcessMedia(ctx scanner_task.TaskContext, mediaData
|
||||
return ctx, nil
|
||||
}
|
||||
|
||||
func (t scannerTasks) ProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData, mediaCachePath string) ([]*models.MediaURL, error) {
|
||||
func (t scannerTasks) ProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData,
|
||||
mediaCachePath string) ([]*models.MediaURL, error) {
|
||||
|
||||
allNewMedia := make([]*models.MediaURL, 0)
|
||||
|
||||
for _, task := range allTasks {
|
||||
@@ -136,7 +144,9 @@ func (t scannerTasks) ProcessMedia(ctx scanner_task.TaskContext, mediaData *medi
|
||||
return allNewMedia, nil
|
||||
}
|
||||
|
||||
func (t scannerTasks) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData, updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {
|
||||
func (t scannerTasks) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData,
|
||||
updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {
|
||||
|
||||
return simpleCombinedTasks(ctx, func(ctx scanner_task.TaskContext, task scanner_task.ScannerTask) error {
|
||||
return task.AfterProcessMedia(ctx, mediaData, updatedURLs, mediaIndex, mediaTotal)
|
||||
})
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/photoview/photoview/api/scanner/scanner_task"
|
||||
"github.com/photoview/photoview/api/scanner/scanner_tasks/processing_tasks"
|
||||
"github.com/pkg/errors"
|
||||
"gopkg.in/vansante/go-ffprobe.v2"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -60,18 +61,7 @@ func ScanVideoMetadata(tx *gorm.DB, video *models.Media) error {
|
||||
}
|
||||
}
|
||||
|
||||
var framerate *float64 = nil
|
||||
if stream.AvgFrameRate != "" {
|
||||
parts := strings.Split(stream.AvgFrameRate, "/")
|
||||
if len(parts) == 2 {
|
||||
if numerator, err := strconv.ParseInt(parts[0], 10, 64); err == nil {
|
||||
if denominator, err := strconv.ParseInt(parts[1], 10, 64); err == nil {
|
||||
result := float64(numerator) / float64(denominator)
|
||||
framerate = &result
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
framerate := getFrameRate(stream)
|
||||
|
||||
videoMetadata := models.VideoMetadata{
|
||||
Width: stream.Width,
|
||||
@@ -92,3 +82,19 @@ func ScanVideoMetadata(tx *gorm.DB, video *models.Media) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getFrameRate(stream *ffprobe.Stream) *float64 {
|
||||
var framerate *float64 = nil
|
||||
if stream.AvgFrameRate != "" {
|
||||
parts := strings.Split(stream.AvgFrameRate, "/")
|
||||
if len(parts) == 2 {
|
||||
if numerator, err := strconv.ParseInt(parts[0], 10, 64); err == nil {
|
||||
if denominator, err := strconv.ParseInt(parts[1], 10, 64); err == nil {
|
||||
result := float64(numerator) / float64(denominator)
|
||||
framerate = &result
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return framerate
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user