diff --git a/pkg/models/project.go b/pkg/models/project.go index 9c3d398f00d..ec46b0f4db8 100644 --- a/pkg/models/project.go +++ b/pkg/models/project.go @@ -1030,7 +1030,12 @@ func (p *Project) DeleteBackgroundFileIfExists() (err error) { } file := files.File{ID: p.BackgroundFileID} - return file.Delete() + err = file.Delete() + if err != nil && files.IsErrFileDoesNotExist(err) { + return nil + } + + return err } // SetProjectBackground sets a background file as project background in the db diff --git a/pkg/models/project_duplicate.go b/pkg/models/project_duplicate.go index fcdbe366332..ee6882b63e3 100644 --- a/pkg/models/project_duplicate.go +++ b/pkg/models/project_duplicate.go @@ -118,43 +118,9 @@ func (pd *ProjectDuplicate) Create(s *xorm.Session, doer web.Auth) (err error) { return } - // Background files + unsplash info - if pd.Project.BackgroundFileID != 0 { - - log.Debugf("Duplicating background %d from project %d into %d", pd.Project.BackgroundFileID, pd.ProjectID, pd.Project.ID) - - f := &files.File{ID: pd.Project.BackgroundFileID} - if err := f.LoadFileMetaByID(); err != nil { - return err - } - if err := f.LoadFileByID(); err != nil { - return err - } - defer f.File.Close() - - file, err := files.Create(f.File, f.Name, f.Size, doer) - if err != nil { - return err - } - - // Get unsplash info if applicable - up, err := GetUnsplashPhotoByFileID(s, pd.Project.BackgroundFileID) - if err != nil && files.IsErrFileIsNotUnsplashFile(err) { - return err - } - if up != nil { - up.ID = 0 - up.FileID = file.ID - if err := up.Save(s); err != nil { - return err - } - } - - if err := SetProjectBackground(s, pd.Project.ID, file, pd.Project.BackgroundBlurHash); err != nil { - return err - } - - log.Debugf("Duplicated project background from project %d into %d", pd.ProjectID, pd.Project.ID) + err = duplicateProjectBackground(s, pd, doer) + if err != nil { + return } // Rights / Shares @@ -207,6 +173,54 @@ func (pd *ProjectDuplicate) Create(s *xorm.Session, doer web.Auth) (err error) { return } +func duplicateProjectBackground(s *xorm.Session, pd *ProjectDuplicate, doer web.Auth) (err error) { + if pd.Project.BackgroundFileID == 0 { + return + } + + log.Debugf("Duplicating background %d from project %d into %d", pd.Project.BackgroundFileID, pd.ProjectID, pd.Project.ID) + + f := &files.File{ID: pd.Project.BackgroundFileID} + err = f.LoadFileMetaByID() + if err != nil && files.IsErrFileDoesNotExist(err) { + pd.Project.BackgroundFileID = 0 + return nil + } + if err != nil { + return err + } + if err := f.LoadFileByID(); err != nil { + return err + } + defer f.File.Close() + + file, err := files.Create(f.File, f.Name, f.Size, doer) + if err != nil { + return err + } + + // Get unsplash info if applicable + up, err := GetUnsplashPhotoByFileID(s, pd.Project.BackgroundFileID) + if err != nil && !files.IsErrFileIsNotUnsplashFile(err) { + return err + } + if up != nil { + up.ID = 0 + up.FileID = file.ID + if err := up.Save(s); err != nil { + return err + } + } + + if err := SetProjectBackground(s, pd.Project.ID, file, pd.Project.BackgroundBlurHash); err != nil { + return err + } + + log.Debugf("Duplicated project background from project %d into %d", pd.ProjectID, pd.Project.ID) + + return +} + func duplicateTasks(s *xorm.Session, doer web.Auth, ld *ProjectDuplicate, bucketMap map[int64]int64) (err error) { // Get all tasks + all task details tasks, _, _, err := getTasksForProjects(s, []*Project{{ID: ld.ProjectID}}, doer, &taskSearchOptions{}) diff --git a/pkg/modules/background/unsplash/unsplash.go b/pkg/modules/background/unsplash/unsplash.go index d8df931889d..e5e58dc57ee 100644 --- a/pkg/modules/background/unsplash/unsplash.go +++ b/pkg/modules/background/unsplash/unsplash.go @@ -291,11 +291,13 @@ func (p *Provider) Set(s *xorm.Session, image *background.Image, project *models // Remove the old background if one exists if project.BackgroundFileID != 0 { file := files.File{ID: project.BackgroundFileID} - if err := file.Delete(); err != nil { + err = file.Delete() + if err != nil && !files.IsErrFileDoesNotExist(err) { return err } - if err := models.RemoveUnsplashPhoto(s, project.BackgroundFileID); err != nil { + err = models.RemoveUnsplashPhoto(s, project.BackgroundFileID) + if err != nil && !files.IsErrFileDoesNotExist(err) { return err } } diff --git a/pkg/modules/background/upload/upload.go b/pkg/modules/background/upload/upload.go index d1417746741..e202d1de222 100644 --- a/pkg/modules/background/upload/upload.go +++ b/pkg/modules/background/upload/upload.go @@ -56,7 +56,8 @@ func (p *Provider) Set(s *xorm.Session, img *background.Image, project *models.P // Remove the old background if one exists if project.BackgroundFileID != 0 { file := files.File{ID: project.BackgroundFileID} - if err := file.Delete(); err != nil { + err := file.Delete() + if err != nil && !files.IsErrFileDoesNotExist(err) { return err } }