added implementation for synchronizeLocalImageMetadataFindFilesToDelete
added test synchronizeLocalImageMetadataFindFilesToDelete updated usage of entry and leave debug messages of the functions
This commit is contained in:
parent
c4e33598e9
commit
df349a85e6
@ -9,6 +9,7 @@ import (
|
|||||||
"git.haefelfinger.net/piwigo/PiwigoDirectoryUploader/internal/pkg/localFileStructure"
|
"git.haefelfinger.net/piwigo/PiwigoDirectoryUploader/internal/pkg/localFileStructure"
|
||||||
"git.haefelfinger.net/piwigo/PiwigoDirectoryUploader/internal/pkg/piwigo"
|
"git.haefelfinger.net/piwigo/PiwigoDirectoryUploader/internal/pkg/piwigo"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -21,7 +22,9 @@ type fileChecksumCalculator func(filePath string) (string, error)
|
|||||||
// Update the local image metadata by walking through all found files and check if the modification date has changed
|
// Update the local image metadata by walking through all found files and check if the modification date has changed
|
||||||
// or if they are new to the local database. If the files is new or changed, the md5sum will be rebuilt as well.
|
// or if they are new to the local database. If the files is new or changed, the md5sum will be rebuilt as well.
|
||||||
func synchronizeLocalImageMetadata(metadataStorage ImageMetadataProvider, fileSystemNodes map[string]*localFileStructure.FilesystemNode, categories map[string]*piwigo.PiwigoCategory, checksumCalculator fileChecksumCalculator) error {
|
func synchronizeLocalImageMetadata(metadataStorage ImageMetadataProvider, fileSystemNodes map[string]*localFileStructure.FilesystemNode, categories map[string]*piwigo.PiwigoCategory, checksumCalculator fileChecksumCalculator) error {
|
||||||
logrus.Debugf("Starting synchronizeLocalImageMetadata")
|
logrus.Debug("Starting synchronizeLocalImageMetadata")
|
||||||
|
defer logrus.Debug("Leaving synchronizeLocalImageMetadata")
|
||||||
|
|
||||||
logrus.Info("Synchronizing local image metadata database with local available images")
|
logrus.Info("Synchronizing local image metadata database with local available images")
|
||||||
|
|
||||||
err := synchronizeLocalImageMetadataScanNewFiles(fileSystemNodes, metadataStorage, categories, checksumCalculator)
|
err := synchronizeLocalImageMetadataScanNewFiles(fileSystemNodes, metadataStorage, categories, checksumCalculator)
|
||||||
@ -29,11 +32,17 @@ func synchronizeLocalImageMetadata(metadataStorage ImageMetadataProvider, fileSy
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Debugf("Finished synchronizeLocalImageMetadata")
|
err = synchronizeLocalImageMetadataFindFilesToDelete(metadataStorage)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func synchronizeLocalImageMetadataScanNewFiles(fileSystemNodes map[string]*localFileStructure.FilesystemNode, metadataStorage ImageMetadataProvider, categories map[string]*piwigo.PiwigoCategory, checksumCalculator fileChecksumCalculator) error {
|
func synchronizeLocalImageMetadataScanNewFiles(fileSystemNodes map[string]*localFileStructure.FilesystemNode, metadataStorage ImageMetadataProvider, categories map[string]*piwigo.PiwigoCategory, checksumCalculator fileChecksumCalculator) error {
|
||||||
|
logrus.Debug("Entering synchronizeLocalImageMetadataScanNewFiles")
|
||||||
|
defer logrus.Debug("Leaving synchronizeLocalImageMetadataScanNewFiles")
|
||||||
|
|
||||||
for _, file := range fileSystemNodes {
|
for _, file := range fileSystemNodes {
|
||||||
if file.IsDir {
|
if file.IsDir {
|
||||||
// we are only interested in files not directories
|
// we are only interested in files not directories
|
||||||
@ -81,10 +90,33 @@ func synchronizeLocalImageMetadataScanNewFiles(fileSystemNodes map[string]*local
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func synchronizeLocalImageMetadataFindFilesToDelete(provider ImageMetadataProvider) error {
|
||||||
|
logrus.Debug("Entering synchronizeLocalImageMetadataFindFilesToDelete")
|
||||||
|
defer logrus.Debug("Leaving synchronizeLocalImageMetadataFindFilesToDelete")
|
||||||
|
|
||||||
|
images, err := provider.ImageMetadataAll()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, img := range images {
|
||||||
|
if _, err := os.Stat(img.FullImagePath); os.IsNotExist(err) {
|
||||||
|
img.UploadRequired = false
|
||||||
|
img.DeleteRequired = true
|
||||||
|
err := provider.SaveImageMetadata(img)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Uploads the pending images to the piwigo gallery and assign the category of to the image.
|
// Uploads the pending images to the piwigo gallery and assign the category of to the image.
|
||||||
// Update local metadata and set upload flag to false. Also updates the piwigo image id if there was a difference.
|
// Update local metadata and set upload flag to false. Also updates the piwigo image id if there was a difference.
|
||||||
func uploadImages(piwigoCtx piwigo.PiwigoImageApi, metadataProvider ImageMetadataProvider) error {
|
func uploadImages(piwigoCtx piwigo.PiwigoImageApi, metadataProvider ImageMetadataProvider) error {
|
||||||
logrus.Debugf("Starting uploadImages")
|
logrus.Debug("Starting uploadImages")
|
||||||
|
defer logrus.Debug("Finished uploadImages successfully")
|
||||||
|
|
||||||
images, err := metadataProvider.ImageMetadataToUpload()
|
images, err := metadataProvider.ImageMetadataToUpload()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -114,17 +146,17 @@ func uploadImages(piwigoCtx piwigo.PiwigoImageApi, metadataProvider ImageMetadat
|
|||||||
logrus.Warnf("could not save uploaded image %s. Continuing with the next image.", img.FullImagePath)
|
logrus.Warnf("could not save uploaded image %s. Continuing with the next image.", img.FullImagePath)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logrus.Debugf("Finished uploadImages successfully")
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method aggregates the check for files with missing piwigoids and if changed files need to be uploaded again.
|
// This method aggregates the check for files with missing piwigoids and if changed files need to be uploaded again.
|
||||||
func synchronizePiwigoMetadata(piwigoCtx piwigo.PiwigoImageApi, metadataProvider ImageMetadataProvider) error {
|
func synchronizePiwigoMetadata(piwigoCtx piwigo.PiwigoImageApi, metadataProvider ImageMetadataProvider) error {
|
||||||
|
logrus.Debug("Entering synchronizePiwigoMetadata")
|
||||||
|
defer logrus.Debug("Leaving synchronizePiwigoMetadata")
|
||||||
|
|
||||||
// TODO: check if category has to be assigned (image possibly added to two albums -> only uploaded once but assigned multiple times) -> implement later
|
// TODO: check if category has to be assigned (image possibly added to two albums -> only uploaded once but assigned multiple times) -> implement later
|
||||||
logrus.Debugf("Starting synchronizePiwigoMetadata")
|
|
||||||
err := updatePiwigoIdIfAlreadyUploaded(metadataProvider, piwigoCtx)
|
err := updatePiwigoIdIfAlreadyUploaded(metadataProvider, piwigoCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -140,7 +172,8 @@ func synchronizePiwigoMetadata(piwigoCtx piwigo.PiwigoImageApi, metadataProvider
|
|||||||
|
|
||||||
// Check all images with upload required if they are really changed and need to be uploaded to the server.
|
// Check all images with upload required if they are really changed and need to be uploaded to the server.
|
||||||
func checkPiwigoForChangedImages(provider ImageMetadataProvider, piwigoCtx piwigo.PiwigoImageApi) error {
|
func checkPiwigoForChangedImages(provider ImageMetadataProvider, piwigoCtx piwigo.PiwigoImageApi) error {
|
||||||
logrus.Infof("Checking pending files if they really differ from the version in piwigo...")
|
logrus.Info("Checking pending files if they really differ from the version in piwigo...")
|
||||||
|
defer logrus.Info("Finished checking pending files if they really differ from the version in piwigo...")
|
||||||
|
|
||||||
images, err := provider.ImageMetadataToUpload()
|
images, err := provider.ImageMetadataToUpload()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -178,7 +211,9 @@ func checkPiwigoForChangedImages(provider ImageMetadataProvider, piwigoCtx piwig
|
|||||||
// This function calls piwigo and checks if the given md5sum is already present.
|
// This function calls piwigo and checks if the given md5sum is already present.
|
||||||
// Only files without a piwigo id are used to query the server.
|
// Only files without a piwigo id are used to query the server.
|
||||||
func updatePiwigoIdIfAlreadyUploaded(provider ImageMetadataProvider, piwigoCtx piwigo.PiwigoImageApi) error {
|
func updatePiwigoIdIfAlreadyUploaded(provider ImageMetadataProvider, piwigoCtx piwigo.PiwigoImageApi) error {
|
||||||
logrus.Infof("checking for pending files that are already on piwigo and updating piwigoids...")
|
logrus.Info("checking for pending files that are already on piwigo and updating piwigoids...")
|
||||||
|
defer logrus.Info("finshed checking for pending files that are already on piwigo and updating piwigoids...")
|
||||||
|
|
||||||
images, err := provider.ImageMetadataToUpload()
|
images, err := provider.ImageMetadataToUpload()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_synchronize_local_image_metadata_should_fo_nothing_if_empty(t *testing.T) {
|
func Test_synchronize_local_image_metadata_should_find_nothing_if_empty(t *testing.T) {
|
||||||
categories := make(map[string]*piwigo.PiwigoCategory)
|
categories := make(map[string]*piwigo.PiwigoCategory)
|
||||||
categories["2019/shooting1"] = &piwigo.PiwigoCategory{Id: 1}
|
categories["2019/shooting1"] = &piwigo.PiwigoCategory{Id: 1}
|
||||||
|
|
||||||
@ -411,6 +411,34 @@ func Test_uploadImages_saves_same_id_to_db(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_synchronizeLocalImageMetadataFindFilesToDelete(t *testing.T) {
|
||||||
|
mockCtrl := gomock.NewController(t)
|
||||||
|
defer mockCtrl.Finish()
|
||||||
|
|
||||||
|
img := ImageMetaData{
|
||||||
|
ImageId: 1,
|
||||||
|
PiwigoId: 5,
|
||||||
|
FullImagePath: "/nonexisting/file.jpg",
|
||||||
|
UploadRequired: true,
|
||||||
|
Md5Sum: "1234",
|
||||||
|
CategoryId: 2,
|
||||||
|
}
|
||||||
|
images := []ImageMetaData{img}
|
||||||
|
|
||||||
|
imgToSave := img
|
||||||
|
imgToSave.UploadRequired = false
|
||||||
|
imgToSave.DeleteRequired = true
|
||||||
|
|
||||||
|
dbmock := NewMockImageMetadataProvider(mockCtrl)
|
||||||
|
dbmock.EXPECT().ImageMetadataAll().Times(1).Return(images, nil)
|
||||||
|
dbmock.EXPECT().SaveImageMetadata(imgToSave).Times(1)
|
||||||
|
|
||||||
|
err := synchronizeLocalImageMetadataFindFilesToDelete(dbmock)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// test metadata store to store save the metadat and simulate the database
|
// test metadata store to store save the metadat and simulate the database
|
||||||
//TODO: refactor to use generated test implementation
|
//TODO: refactor to use generated test implementation
|
||||||
type testStore struct {
|
type testStore struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user