Ejemplo n.º 1
0
		public AlbumForApiContract(
			Album album, AlbumMergeRecord mergeRecord, 
			ContentLanguagePreference languagePreference, 
			IEntryThumbPersister thumbPersister,
			bool ssl,
			AlbumOptionalFields fields) : this(album, mergeRecord, languagePreference, 
				fields.HasFlag(AlbumOptionalFields.Artists), 
				fields.HasFlag(AlbumOptionalFields.Names), 
				fields.HasFlag(AlbumOptionalFields.PVs), 
				fields.HasFlag(AlbumOptionalFields.Tags), 
				fields.HasFlag(AlbumOptionalFields.WebLinks)) {

			if (languagePreference != ContentLanguagePreference.Default || fields.HasFlag(AlbumOptionalFields.AdditionalNames)) {
				AdditionalNames = album.Names.GetAdditionalNamesStringForLanguage(languagePreference);
			}

			if (fields.HasFlag(AlbumOptionalFields.Identifiers)) {
				Identifiers = album.Identifiers.Select(i => new AlbumIdentifierContract(i)).ToArray();
			}

			if (thumbPersister != null && fields.HasFlag(AlbumOptionalFields.MainPicture) && !string.IsNullOrEmpty(album.CoverPictureMime)) {
				
				MainPicture = new EntryThumbForApiContract(new EntryThumb(album, album.CoverPictureMime), thumbPersister, ssl);

			}

		}
Ejemplo n.º 2
0
        public AlbumForApiContract(
            Album album, AlbumMergeRecord mergeRecord,
            ContentLanguagePreference languagePreference,
            IEntryThumbPersister thumbPersister,
            bool ssl,
            AlbumOptionalFields fields) : this(album, mergeRecord, languagePreference,
                                               fields.HasFlag(AlbumOptionalFields.Artists),
                                               fields.HasFlag(AlbumOptionalFields.Names),
                                               fields.HasFlag(AlbumOptionalFields.PVs),
                                               fields.HasFlag(AlbumOptionalFields.Tags),
                                               fields.HasFlag(AlbumOptionalFields.WebLinks))
        {
            if (languagePreference != ContentLanguagePreference.Default || fields.HasFlag(AlbumOptionalFields.AdditionalNames))
            {
                AdditionalNames = album.Names.GetAdditionalNamesStringForLanguage(languagePreference);
            }

            if (fields.HasFlag(AlbumOptionalFields.Identifiers))
            {
                Identifiers = album.Identifiers.Select(i => new AlbumIdentifierContract(i)).ToArray();
            }

            if (thumbPersister != null && fields.HasFlag(AlbumOptionalFields.MainPicture) && !string.IsNullOrEmpty(album.CoverPictureMime))
            {
                MainPicture = new EntryThumbForApiContract(new EntryThumb(album, album.CoverPictureMime), thumbPersister, ssl);
            }
        }
Ejemplo n.º 3
0
        public AlbumForApiContract(Album album, AlbumMergeRecord mergeRecord, ContentLanguagePreference languagePreference,
                                   bool artists = true, bool names = true, bool pvs = false, bool tags = true, bool webLinks = false)
        {
            ArtistString        = album.ArtistString[languagePreference];
            CatalogNumber       = album.OriginalRelease != null ? album.OriginalRelease.CatNum : null;
            CreateDate          = album.CreateDate;
            DefaultName         = album.DefaultName;
            DefaultNameLanguage = album.Names.SortNames.DefaultLanguage;
            DiscType            = album.DiscType;
            Id            = album.Id;
            Name          = album.Names.SortNames[languagePreference];
            RatingAverage = album.RatingAverage;
            RatingCount   = album.RatingCount;
            ReleaseDate   = new OptionalDateTimeContract(album.OriginalReleaseDate);
            ReleaseEvent  = album.OriginalReleaseEventName;
            Status        = album.Status;
            Version       = album.Version;

            if (languagePreference != ContentLanguagePreference.Default)
            {
                LocalizedName = album.Names.SortNames[languagePreference];
            }

            if (artists)
            {
                Artists = album.Artists.Select(a => new ArtistForAlbumForApiContract(a, languagePreference)).ToArray();
            }

            if (names)
            {
                Names = album.Names.Select(n => new LocalizedStringContract(n)).ToArray();
            }

            if (pvs)
            {
                PVs = album.PVs.Select(p => new PVContract(p)).ToArray();
            }

            if (tags)
            {
                Tags = album.Tags.Usages.Select(u => new TagUsageForApiContract(u)).ToArray();
            }

            if (webLinks)
            {
                WebLinks = album.WebLinks.Select(w => new WebLinkContract(w)).ToArray();
            }

            if (mergeRecord != null)
            {
                MergedTo = mergeRecord.Target.Id;
            }
        }
Ejemplo n.º 4
0
		public AlbumForApiContract(Album album, AlbumMergeRecord mergeRecord, ContentLanguagePreference languagePreference, 
			bool artists = true, bool names = true, bool pvs = false, bool tags = true, bool webLinks = false) {

			ArtistString = album.ArtistString[languagePreference];
			CatalogNumber = album.OriginalRelease != null ? album.OriginalRelease.CatNum : null;
			CreateDate = album.CreateDate;
			DefaultName = album.DefaultName;
			DefaultNameLanguage = album.Names.SortNames.DefaultLanguage;
			DiscType = album.DiscType;
			Id = album.Id;
			Name = album.Names.SortNames[languagePreference];				
			RatingAverage = album.RatingAverage;
			RatingCount = album.RatingCount;
			ReleaseDate = new OptionalDateTimeContract(album.OriginalReleaseDate);
			ReleaseEvent = album.OriginalReleaseEventName;
			Status = album.Status;
			Version = album.Version;

			if (languagePreference != ContentLanguagePreference.Default) {
				LocalizedName = album.Names.SortNames[languagePreference];				
			}

			if (artists)
				Artists = album.Artists.Select(a => new ArtistForAlbumForApiContract(a, languagePreference)).ToArray();

			if (names)
				Names = album.Names.Select(n => new LocalizedStringContract(n)).ToArray();

			if (pvs)
				PVs = album.PVs.Select(p => new PVContract(p)).ToArray();

			if (tags)
				Tags = album.Tags.Usages.Select(u => new TagUsageForApiContract(u)).ToArray();

			if (webLinks)
				WebLinks = album.WebLinks.Select(w => new WebLinkContract(w)).ToArray();

			if (mergeRecord != null)
				MergedTo = mergeRecord.Target.Id;

		}
Ejemplo n.º 5
0
        public AlbumForApiContract(
            Album album, AlbumMergeRecord mergeRecord,
            ContentLanguagePreference languagePreference,
            IAggregatedEntryImageUrlFactory thumbPersister,
            AlbumOptionalFields fields,
            SongOptionalFields songFields)
        {
            ArtistString        = album.ArtistString[languagePreference];
            CatalogNumber       = album.OriginalRelease != null ? album.OriginalRelease.CatNum : null;
            CreateDate          = album.CreateDate;
            DefaultName         = album.DefaultName;
            DefaultNameLanguage = album.Names.SortNames.DefaultLanguage;
            DiscType            = album.DiscType;
            Id            = album.Id;
            Name          = album.Names.SortNames[languagePreference];
            RatingAverage = album.RatingAverage;
            RatingCount   = album.RatingCount;
            ReleaseDate   = new OptionalDateTimeContract(album.OriginalReleaseDate);
            Status        = album.Status;
            Version       = album.Version;

            if (fields.HasFlag(AlbumOptionalFields.AdditionalNames))
            {
                AdditionalNames = album.Names.GetAdditionalNamesStringForLanguage(languagePreference);
            }

            if (fields.HasFlag(AlbumOptionalFields.Artists))
            {
                Artists = album.Artists.Select(a => new ArtistForAlbumForApiContract(a, languagePreference)).ToArray();
            }

            if (fields.HasFlag(AlbumOptionalFields.Description))
            {
                Description = album.Description[languagePreference];
            }

            if (fields.HasFlag(AlbumOptionalFields.Discs))
            {
                Discs = album.Discs.Select(d => new AlbumDiscPropertiesContract(d)).ToArray();
            }

            if (fields.HasFlag(AlbumOptionalFields.Identifiers))
            {
                Identifiers = album.Identifiers.Select(i => new AlbumIdentifierContract(i)).ToArray();
            }

            if (thumbPersister != null && fields.HasFlag(AlbumOptionalFields.MainPicture) && album.Thumb != null)
            {
                MainPicture = new EntryThumbForApiContract(album.Thumb, thumbPersister);
            }

            if (fields.HasFlag(AlbumOptionalFields.Names))
            {
                Names = album.Names.Select(n => new LocalizedStringContract(n)).ToArray();
            }

            if (fields.HasFlag(AlbumOptionalFields.PVs))
            {
                PVs = album.PVs.Select(p => new PVContract(p)).ToArray();
            }

            if (fields.HasFlag(AlbumOptionalFields.ReleaseEvent))
            {
                ReleaseEvent = album.OriginalReleaseEvent != null ? new ReleaseEventForApiContract(album.OriginalReleaseEvent, languagePreference, ReleaseEventOptionalFields.None, thumbPersister) : null;
            }

            if (fields.HasFlag(AlbumOptionalFields.Tags))
            {
                Tags = album.Tags.ActiveUsages.Select(u => new TagUsageForApiContract(u, languagePreference)).ToArray();
            }

            if (fields.HasFlag(AlbumOptionalFields.Tracks))
            {
                Tracks = album.Songs.Select(s => new SongInAlbumForApiContract(s, languagePreference, songFields)).ToArray();
            }

            if (fields.HasFlag(AlbumOptionalFields.WebLinks))
            {
                WebLinks = album.WebLinks.Select(w => new WebLinkForApiContract(w)).ToArray();
            }

            if (mergeRecord != null)
            {
                MergedTo = mergeRecord.Target.Id;
            }
        }
Ejemplo n.º 6
0
        public void Merge(int sourceId, int targetId)
        {
            PermissionContext.VerifyPermission(PermissionToken.MergeEntries);

            if (sourceId == targetId)
            {
                throw new ArgumentException("Source and target albums can't be the same", "targetId");
            }

            repository.HandleTransaction(session => {
                var source = session.Load(sourceId);
                var target = session.Load(targetId);

                session.AuditLogger.AuditLog(string.Format("Merging {0} to {1}", EntryLinkFactory.CreateEntryLink(source), EntryLinkFactory.CreateEntryLink(target)));

                NHibernateUtil.Initialize(source.CoverPictureData);
                NHibernateUtil.Initialize(target.CoverPictureData);

                foreach (var n in source.Names.Names.Where(n => !target.HasName(n)))
                {
                    var name = target.CreateName(n.Value, n.Language);
                    session.Save(name);
                }

                foreach (var w in source.WebLinks.Where(w => !target.HasWebLink(w.Url)))
                {
                    var link = target.CreateWebLink(w.Description, w.Url, w.Category);
                    session.Save(link);
                }

                var artists = source.Artists.Where(a => !target.HasArtistForAlbum(a)).ToArray();
                foreach (var a in artists)
                {
                    a.Move(target);
                    session.Update(a);
                }

                var songs = source.Songs.Where(s => s.Song == null || !target.HasSong(s.Song)).ToArray();
                foreach (var s in songs)
                {
                    s.Move(target);
                    session.Update(s);
                }

                var pictures = source.Pictures.ToArray();
                foreach (var p in pictures)
                {
                    p.Move(target);
                    session.Update(p);
                }

                var userCollections = source.UserCollections.Where(a => !target.IsInUserCollection(a.User)).ToArray();
                foreach (var u in userCollections)
                {
                    u.Move(target);
                    session.Update(u);
                }

                target.Description.CopyIfEmpty(source.Description);

                if (target.OriginalRelease == null)
                {
                    target.OriginalRelease = new AlbumRelease();
                }

                if (string.IsNullOrEmpty(target.OriginalRelease.CatNum) && source.OriginalRelease != null)
                {
                    target.OriginalRelease.CatNum = source.OriginalRelease.CatNum;
                }

                if (target.OriginalRelease.ReleaseEvent == null && source.OriginalRelease != null)
                {
                    target.OriginalRelease.ReleaseEvent = source.OriginalRelease.ReleaseEvent;
                }

                if (target.OriginalRelease.ReleaseDate == null)
                {
                    target.OriginalRelease.ReleaseDate = new OptionalDateTime();
                }

                if (target.OriginalReleaseDate.Year == null && source.OriginalRelease != null)
                {
                    target.OriginalReleaseDate.Year = source.OriginalReleaseDate.Year;
                }

                if (target.OriginalReleaseDate.Month == null && source.OriginalRelease != null)
                {
                    target.OriginalReleaseDate.Month = source.OriginalReleaseDate.Month;
                }

                if (target.OriginalReleaseDate.Day == null && source.OriginalRelease != null)
                {
                    target.OriginalReleaseDate.Day = source.OriginalReleaseDate.Day;
                }

                // Create merge record
                var mergeEntry = new AlbumMergeRecord(source, target);
                session.Save(mergeEntry);

                source.Deleted = true;

                target.UpdateArtistString();
                target.Names.UpdateSortNames();

                Archive(session, source, AlbumArchiveReason.Deleted, string.Format("Merged to {0}", target));
                Archive(session, target, AlbumArchiveReason.Merged, string.Format("Merged from {0}", source));

                session.Update(source);
                session.Update(target);
            });
        }