Beispiel #1
0
        private void InternalCopyFileData(MediaFile file, MediaFile copy)
        {
            _storageProvider.Save(copy, MediaStorageItem.FromStream(_storageProvider.OpenRead(file)));
            _imageCache.Delete(copy);

            using (var scope = new DbContextScope(_fileRepo.Context, autoCommit: false))
            {
                // Tags.
                _fileRepo.Context.LoadCollection(file, (MediaFile x) => x.Tags);

                var existingTagsIds = copy.Tags.Select(x => x.Id).ToList();

                foreach (var tag in file.Tags)
                {
                    if (!existingTagsIds.Contains(tag.Id))
                    {
                        copy.Tags.Add(tag);
                        existingTagsIds.Add(tag.Id);
                    }
                }

                // Localized values.
                var languages = _languageService.GetAllLanguages(true);

                foreach (var language in languages)
                {
                    var title = file.GetLocalized(x => x.Title, language.Id, false, false).Value;
                    if (title.HasValue())
                    {
                        _localizedEntityService.SaveLocalizedValue(copy, x => x.Title, title, language.Id);
                    }

                    var alt = file.GetLocalized(x => x.Alt, language.Id, false, false).Value;
                    if (alt.HasValue())
                    {
                        _localizedEntityService.SaveLocalizedValue(copy, x => x.Alt, alt, language.Id);
                    }
                }

                scope.Commit();
                _fileRepo.Context.DetachEntities <MediaTag>();
            }
        }