/// <summary>
        /// Permanently delete the specified album from the data store, including any
        /// child albums, media objects, and metadata. This action cannot be undone.
        /// </summary>
        /// <param name="album">The <see cref="IAlbum"/> to delete from the data store.</param>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="album" /> is null.</exception>
        public void Delete(IAlbum album)
        {
            if (album == null)
            {
                throw new ArgumentNullException("album");
            }

            // Get a list of this album and all its child albums. Then delete.
            var albumIds = new List <int> {
                album.Id
            };

            albumIds.AddRange(GetChildAlbumIds(album));

            var repo = new MetadataRepository(Context);

            foreach (var aDto in Where(a => albumIds.Contains(a.AlbumId), m => m.Metadata))
            {
                // We must explicitly delete the album metadata because we don't have a cascade
                // delete relation between them.
                foreach (var mDto in aDto.Metadata.ToList())
                {
                    repo.Delete(mDto);
                }

                // The media objects belonging to this album will be automatically deleted through
                // the cascade delete defined in the database.
                Delete(aDto);
            }

            Save();

            var tagRepo = new TagRepository(Context);

            tagRepo.DeleteUnusedTags();
        }
Beispiel #2
0
        /// <summary>
        /// Saves the specified media object.
        /// </summary>
        /// <param name="mediaObject">The media object.</param>
        /// <exception cref="System.ArgumentNullException">mediaObject</exception>
        public void Save(IGalleryObject mediaObject)
        {
            if (mediaObject == null)
            {
                throw new ArgumentNullException("mediaObject");
            }

            if (mediaObject.IsNew)
            {
                var moDto = new MediaObjectDto
                {
                    FKAlbumId          = mediaObject.Parent.Id,
                    ThumbnailFilename  = mediaObject.Thumbnail.FileName,
                    ThumbnailWidth     = mediaObject.Thumbnail.Width,
                    ThumbnailHeight    = mediaObject.Thumbnail.Height,
                    ThumbnailSizeKB    = mediaObject.Thumbnail.FileSizeKB,
                    OptimizedFilename  = mediaObject.Optimized.FileName,
                    OptimizedWidth     = mediaObject.Optimized.Width,
                    OptimizedHeight    = mediaObject.Optimized.Height,
                    OptimizedSizeKB    = mediaObject.Optimized.FileSizeKB,
                    OriginalFilename   = mediaObject.Original.FileName,
                    OriginalWidth      = mediaObject.Original.Width,
                    OriginalHeight     = mediaObject.Original.Height,
                    OriginalSizeKB     = mediaObject.Original.FileSizeKB,
                    ExternalHtmlSource = mediaObject.Original.ExternalHtmlSource,
                    ExternalType       = (mediaObject.Original.ExternalType == MimeTypeCategory.NotSet ? String.Empty : mediaObject.Original.ExternalType.ToString()),
                    Seq              = mediaObject.Sequence,
                    CreatedBy        = mediaObject.CreatedByUserName,
                    DateAdded        = mediaObject.DateAdded,
                    LastModifiedBy   = mediaObject.LastModifiedByUserName,
                    DateLastModified = mediaObject.DateLastModified,
                    IsPrivate        = mediaObject.IsPrivate
                };

                Add(moDto);
                Save();                 // Save now so we can get at the ID

                if (mediaObject.Id != moDto.MediaObjectId)
                {
                    mediaObject.Id = moDto.MediaObjectId;
                }

                // Insert metadata items, if any, into metadata table.
                var repo = new MetadataRepository(Context);                 // Don't put in using construct because we don't want our Context disposed
                repo.Save(mediaObject.MetadataItems);
            }
            else
            {
                MediaObjectDto moDto = Find(mediaObject.Id);

                if (moDto != null)
                {
                    moDto.FKAlbumId          = mediaObject.Parent.Id;
                    moDto.ThumbnailFilename  = mediaObject.Thumbnail.FileName;
                    moDto.ThumbnailWidth     = mediaObject.Thumbnail.Width;
                    moDto.ThumbnailHeight    = mediaObject.Thumbnail.Height;
                    moDto.ThumbnailSizeKB    = mediaObject.Thumbnail.FileSizeKB;
                    moDto.OptimizedFilename  = mediaObject.Optimized.FileName;
                    moDto.OptimizedWidth     = mediaObject.Optimized.Width;
                    moDto.OptimizedHeight    = mediaObject.Optimized.Height;
                    moDto.OptimizedSizeKB    = mediaObject.Optimized.FileSizeKB;
                    moDto.OriginalFilename   = mediaObject.Original.FileName;
                    moDto.OriginalWidth      = mediaObject.Original.Width;
                    moDto.OriginalHeight     = mediaObject.Original.Height;
                    moDto.OriginalSizeKB     = mediaObject.Original.FileSizeKB;
                    moDto.ExternalHtmlSource = mediaObject.Original.ExternalHtmlSource;
                    moDto.ExternalType       = (mediaObject.Original.ExternalType == MimeTypeCategory.NotSet ? String.Empty : mediaObject.Original.ExternalType.ToString());
                    moDto.Seq              = mediaObject.Sequence;
                    moDto.CreatedBy        = mediaObject.CreatedByUserName;
                    moDto.DateAdded        = mediaObject.DateAdded;
                    moDto.LastModifiedBy   = mediaObject.LastModifiedByUserName;
                    moDto.DateLastModified = mediaObject.DateLastModified;
                    moDto.IsPrivate        = mediaObject.IsPrivate;

                    Save();

                    // Update metadata items, if necessary, in metadata table.
                    var repo = new MetadataRepository(Context);                     // Don't put in using construct because we don't want our Context disposed
                    repo.Save(mediaObject.MetadataItems);
                }
            }
        }
        /// <summary>
        /// Persist the specified album to the data store. Return the ID of the album.
        /// </summary>
        /// <param name="album">An instance of <see cref="IAlbum"/> to persist to the data store.</param>
        /// <returns>
        /// Return the ID of the album. If this is a new album and a new ID has been
        /// assigned, then this value has also been assigned to the ID property of the object.
        /// </returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="album" /> is null.</exception>
        public void Save(IAlbum album)
        {
            if (album == null)
            {
                throw new ArgumentNullException("album");
            }

            if (album.IsNew)
            {
                var aDto = new AlbumDto
                {
                    FKGalleryId            = album.GalleryId,
                    FKAlbumParentId        = (album.Parent.Id > 0 ? album.Parent.Id : new int?()),
                    DirectoryName          = album.DirectoryName,
                    ThumbnailMediaObjectId = album.Thumbnail.MediaObjectId,
                    SortByMetaName         = album.SortByMetaName,
                    SortAscending          = album.SortAscending,
                    Seq              = album.Sequence,
                    CreatedBy        = album.CreatedByUserName,
                    DateAdded        = album.DateAdded,
                    LastModifiedBy   = album.LastModifiedByUserName,
                    DateLastModified = album.DateLastModified,
                    OwnedBy          = album.OwnerUserName,
                    OwnerRoleName    = album.OwnerRoleName,
                    IsPrivate        = album.IsPrivate
                };

                Add(aDto);
                Save();

                if (album.Id != aDto.AlbumId)
                {
                    album.Id = aDto.AlbumId;
                }

                // Insert metadata items, if any, into metadata table.
                var repo = new MetadataRepository(Context);                 // Don't put in using construct because we don't want our Context disposed
                repo.Save(album.MetadataItems);
            }
            else
            {
                AlbumDto aDto = Find(album.Id);

                if (aDto != null)
                {
                    aDto.FKGalleryId            = album.GalleryId;
                    aDto.FKAlbumParentId        = (album.Parent.Id > 0 ? album.Parent.Id : new int?());
                    aDto.DirectoryName          = album.DirectoryName;
                    aDto.ThumbnailMediaObjectId = album.ThumbnailMediaObjectId;
                    aDto.SortByMetaName         = album.SortByMetaName;
                    aDto.SortAscending          = album.SortAscending;
                    aDto.Seq              = album.Sequence;
                    aDto.LastModifiedBy   = album.LastModifiedByUserName;
                    aDto.DateLastModified = album.DateLastModified;
                    aDto.OwnedBy          = album.OwnerUserName;
                    aDto.OwnerRoleName    = album.OwnerRoleName;
                    aDto.IsPrivate        = album.IsPrivate;

                    Save();

                    // Update metadata items, if necessary, in metadata table.
                    var repo = new MetadataRepository(Context);                     // Don't put in using construct because we don't want our Context disposed
                    repo.Save(album.MetadataItems);
                }
            }
        }