mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 21:09:05 +00:00
Cleanup + debounce scanner notifications
This commit is contained in:
@@ -4,6 +4,7 @@ go 1.13
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/99designs/gqlgen v0.10.2
|
github.com/99designs/gqlgen v0.10.2
|
||||||
|
github.com/bep/debounce v1.2.0
|
||||||
github.com/disintegration/imaging v1.6.2
|
github.com/disintegration/imaging v1.6.2
|
||||||
github.com/fatih/color v1.9.0
|
github.com/fatih/color v1.9.0
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ github.com/99designs/gqlgen v0.10.2/go.mod h1:aDB7oabSAyZ4kUHLEySsLxnWrBy3lA0A2g
|
|||||||
github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ=
|
github.com/agnivade/levenshtein v1.0.1 h1:3oJU7J3FGFmyhn8KHjmVaZCN5hxTr7GxgRue+sxIXdQ=
|
||||||
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
|
github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
|
||||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||||
|
github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo=
|
||||||
|
github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/bep/debounce"
|
||||||
"github.com/h2non/filetype"
|
"github.com/h2non/filetype"
|
||||||
"github.com/viktorstrate/photoview/api/graphql/models"
|
"github.com/viktorstrate/photoview/api/graphql/models"
|
||||||
"github.com/viktorstrate/photoview/api/graphql/notification"
|
"github.com/viktorstrate/photoview/api/graphql/notification"
|
||||||
@@ -80,6 +82,7 @@ func scan(database *sql.DB, user *models.User) {
|
|||||||
|
|
||||||
notifyKey := utils.GenerateToken()
|
notifyKey := utils.GenerateToken()
|
||||||
processKey := utils.GenerateToken()
|
processKey := utils.GenerateToken()
|
||||||
|
scanNotifyDebounce := debounce.New(1 * time.Second)
|
||||||
|
|
||||||
timeout := 3000
|
timeout := 3000
|
||||||
notification.BroadcastNotification(&models.Notification{
|
notification.BroadcastNotification(&models.Notification{
|
||||||
@@ -178,14 +181,14 @@ func scan(database *sql.DB, user *models.User) {
|
|||||||
if isNewPhoto {
|
if isNewPhoto {
|
||||||
newPhotos.PushBack(photo)
|
newPhotos.PushBack(photo)
|
||||||
|
|
||||||
if newPhotos.Len()%25 == 0 {
|
scanNotifyDebounce(func() {
|
||||||
notification.BroadcastNotification(&models.Notification{
|
notification.BroadcastNotification(&models.Notification{
|
||||||
Key: processKey,
|
Key: processKey,
|
||||||
Type: models.NotificationTypeMessage,
|
Type: models.NotificationTypeMessage,
|
||||||
Header: "Scanning photo",
|
Header: "Scanning photo",
|
||||||
Content: fmt.Sprintf("Scanning image at %s", photoPath),
|
Content: fmt.Sprintf("Scanning image at %s", photoPath),
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.Commit()
|
tx.Commit()
|
||||||
@@ -329,6 +332,7 @@ func isPathImage(path string, cache *scanner_cache) bool {
|
|||||||
func processUnprocessedPhotos(database *sql.DB, user *models.User, notifyKey string) error {
|
func processUnprocessedPhotos(database *sql.DB, user *models.User, notifyKey string) error {
|
||||||
|
|
||||||
processKey := utils.GenerateToken()
|
processKey := utils.GenerateToken()
|
||||||
|
processNotifyDebounce := debounce.New(500 * time.Microsecond)
|
||||||
|
|
||||||
rows, err := database.Query(`
|
rows, err := database.Query(`
|
||||||
SELECT photo.* FROM photo JOIN album ON photo.album_id = album.album_id
|
SELECT photo.* FROM photo JOIN album ON photo.album_id = album.album_id
|
||||||
@@ -362,14 +366,16 @@ func processUnprocessedPhotos(database *sql.DB, user *models.User, notifyKey str
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var progress float64 = float64(count) / float64(len(photosToProcess)) * 100.0
|
processNotifyDebounce(func() {
|
||||||
|
var progress float64 = float64(count) / float64(len(photosToProcess)) * 100.0
|
||||||
|
|
||||||
notification.BroadcastNotification(&models.Notification{
|
notification.BroadcastNotification(&models.Notification{
|
||||||
Key: processKey,
|
Key: processKey,
|
||||||
Type: models.NotificationTypeProgress,
|
Type: models.NotificationTypeProgress,
|
||||||
Header: fmt.Sprintf("Processing photos (%d of %d)", count, len(photosToProcess)),
|
Header: fmt.Sprintf("Processing photos (%d of %d)", count, len(photosToProcess)),
|
||||||
Content: fmt.Sprintf("Processing photo at %s", photo.Path),
|
Content: fmt.Sprintf("Processing photo at %s", photo.Path),
|
||||||
Progress: &progress,
|
Progress: &progress,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
err = ProcessPhoto(tx, photo)
|
err = ProcessPhoto(tx, photo)
|
||||||
|
|||||||
@@ -342,8 +342,6 @@ func (img *ProcessImageData) PhotoImage(tx *sql.Tx) (image.Image, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("ORIENTATION: %d\n", orientation)
|
|
||||||
|
|
||||||
switch orientation {
|
switch orientation {
|
||||||
case 2:
|
case 2:
|
||||||
photoImg = imaging.FlipH(photoImg)
|
photoImg = imaging.FlipH(photoImg)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import ProtectedImage from './ProtectedImage'
|
|||||||
|
|
||||||
const PhotoContainer = styled.div`
|
const PhotoContainer = styled.div`
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
/* flex-basis: 1; */
|
flex-basis: 0;
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 4px;
|
margin: 4px;
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
|
|||||||
@@ -78,8 +78,6 @@ const PhotoGallery = ({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(minWidth)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Photo
|
<Photo
|
||||||
key={photo.id}
|
key={photo.id}
|
||||||
|
|||||||
Reference in New Issue
Block a user