public virtual ArtistForAlbum AddArtist(Artist artist, bool isSupport, ArtistRoles roles) { ParamIs.NotNull(() => artist); return(artist.AddAlbum(this, isSupport, roles)); }
public virtual bool HasPV(PVService service, string pvId) { ParamIs.NotNullOrEmpty(() => pvId); return(PVs.Any(p => p.Service == service && p.PVId == pvId)); }
public virtual bool IsOnAlbum(Album album) { ParamIs.NotNull(() => album); return(Albums.Any(a => a.Album.Equals(album))); }
/*public virtual SongInAlbum AddAlbum(Album album, int trackNumber) { * * var link = new SongInAlbum(this, album, trackNumber); * AllAlbums.Add(link); * return link; * * }*/ public virtual ArtistForSong AddArtist(Artist artist) { ParamIs.NotNull(() => artist); return(artist.AddSong(this)); }
/// <summary> /// Checks whether this song has a specific artist. /// </summary> /// <param name="artistLink">Artist to be checked. Cannot be null.</param> /// <returns>True if the artist has this album. Otherwise false.</returns> public virtual bool HasArtistLink(ArtistForSong artistLink) { ParamIs.NotNull(() => artistLink); return(Artists.Any(a => a.ArtistLinkEquals(artistLink))); }
public static string EntryDetails(this UrlHelper urlHelper, IEntryBase entryBase) { ParamIs.NotNull(() => entryBase); return(EntryDetails(urlHelper, entryBase.EntryType, entryBase.Id, null)); }
public static string SongDetails(this UrlHelper urlHelper, IEntryBase song, int?albumId = null) { ParamIs.NotNull(() => song); return(urlHelper.Action("Details", "Song", new { id = song.Id, albumId })); }
public ArtistForSongContract(ArtistContract artistContract) { ParamIs.NotNull(() => artistContract); Artist = artistContract; }
public ArtistForSongContract(string name) { ParamIs.NotNullOrEmpty(() => name); Name = name; }
public ImageThumbGenerator(IEntryImagePersister persister) { ParamIs.NotNull(() => persister); _persister = persister; }
public AlbumDetails(AlbumDetailsContract contract, IUserPermissionContext permissionContext) { ParamIs.NotNull(() => contract); AdditionalNames = contract.AdditionalNames; ArtistString = contract.ArtistString; CanEdit = EntryPermissionManager.CanEdit(permissionContext, contract); CanEditPersonalDescription = contract.CanEditPersonalDescription; CanRemoveTagUsages = contract.CanRemoveTagUsages; CommentCount = contract.CommentCount; CreateDate = contract.CreateDate; Description = contract.Description; Deleted = contract.Deleted; DiscType = contract.DiscType; Draft = contract.Status == EntryStatus.Draft; Hits = contract.Hits; Id = contract.Id; LatestComments = contract.LatestComments; MergedTo = contract.MergedTo; Name = contract.Name; OwnedBy = contract.OwnedCount; PersonalDescriptionText = contract.PersonalDescriptionText; PersonalDescriptionAuthor = contract.PersonalDescriptionAuthor; Pictures = contract.Pictures; PVs = contract.PVs; RatingAverage = contract.RatingAverage; RatingCount = contract.RatingCount; Status = contract.Status; Tags = contract.Tags; TotalLength = contract.TotalLength; UserHasAlbum = contract.AlbumForUser != null; Version = contract.Version; WebLinks = contract.WebLinks; WishlistedBy = contract.WishlistCount; mime = contract.CoverPictureMime; var songsByDiscs = contract.Songs.GroupBy(s => s.DiscNumber); Discs = (from songsByDisc in songsByDiscs let dn = songsByDisc.Key select new AlbumDisc(dn, songsByDisc, contract.Discs.ContainsKey(dn) ? contract.Discs[dn] : null)) .ToArray(); if (contract.AlbumForUser != null) { AlbumMediaType = contract.AlbumForUser.MediaType; AlbumPurchaseStatus = contract.AlbumForUser.PurchaseStatus; CollectionRating = contract.AlbumForUser.Rating; } if (contract.OriginalRelease != null) { CatNum = contract.OriginalRelease.CatNum; ReleaseEvent = contract.OriginalRelease.ReleaseEvent; ReleaseDate = contract.OriginalRelease.ReleaseDate; FullReleaseDate = ReleaseDate.Year.HasValue && ReleaseDate.Month.HasValue && ReleaseDate.Day.HasValue ? (DateTime?)new DateTime(ReleaseDate.Year.Value, ReleaseDate.Month.Value, ReleaseDate.Day.Value) : null; } var artists = contract.ArtistLinks; Bands = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Band)).ToArray(); Circles = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Circle)).ToArray(); Labels = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Label)).ToArray(); Producers = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Producer)).ToArray(); Vocalists = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Vocalist)).ToArray(); OtherArtists = artists.Where(a => a.Categories.HasFlag(ArtistCategories.Other) || a.Categories.HasFlag(ArtistCategories.Animator)).ToArray(); PrimaryPV = PVHelper.PrimaryPV(PVs); }
public virtual bool IsInUserCollection(User user) { ParamIs.NotNull(() => user); return(UserCollections.Any(w => w.User.Equals(user))); }
public virtual bool HasSong(Song song) { ParamIs.NotNull(() => song); return(Songs.Any(a => song.Equals(a.Song))); }
/// <summary> /// Checks whether this album has a specific artist. /// </summary> /// <param name="artistForAlbum">Artist to be checked. Cannot be null.</param> /// <returns>True if the artist has this album. Otherwise false.</returns> public virtual bool HasArtistForAlbum(ArtistForAlbum artistForAlbum) { ParamIs.NotNull(() => artistForAlbum); return(Artists.Any(a => a.ArtistLinkEquals(artistForAlbum))); }
/// <summary> /// Updates or creates release event. /// /// Album release event names will be updated as well if the name changed. /// </summary> /// <param name="contract">Updated contract. Cannot be null.</param> /// <returns>Updated release event data. Cannot be null.</returns> /// <exception cref="DuplicateEventNameException">If the event name is already in use.</exception> public ReleaseEventContract Update(ReleaseEventForEditContract contract, EntryPictureFileContract pictureData) { ParamIs.NotNull(() => contract); PermissionContext.VerifyManageDatabase(); return(repository.HandleTransaction(session => { ReleaseEvent ev; if (contract.Id == 0) { var diff = new ReleaseEventDiff(); if (!contract.Series.IsNullOrDefault()) { var series = session.OfType <ReleaseEventSeries>().Load(contract.Series.Id); ev = new ReleaseEvent(contract.Description, contract.Date, series, contract.SeriesNumber, contract.SeriesSuffix, contract.DefaultNameLanguage, contract.CustomName); series.AllEvents.Add(ev); } else { ev = new ReleaseEvent(contract.Description, contract.Date, contract.DefaultNameLanguage); } ev.Category = contract.Category; ev.EndDate = contract.EndDate; ev.SongList = session.NullSafeLoad <SongList>(contract.SongList); ev.Status = contract.Status; ev.VenueName = contract.VenueName; if (contract.SongList != null) { diff.SongList.Set(); } if (!string.IsNullOrEmpty(contract.VenueName)) { diff.Venue.Set(); } var weblinksDiff = WebLink.Sync(ev.WebLinks, contract.WebLinks, ev); if (weblinksDiff.Changed) { diff.WebLinks.Set(); } var pvDiff = ev.PVs.Sync(contract.PVs, ev.CreatePV); session.OfType <PVForAlbum>().Sync(pvDiff); if (pvDiff.Changed) { diff.PVs.Set(); } var artistDiff = ev.SyncArtists(contract.Artists, artistId => session.Load <Artist>(artistId)); if (artistDiff.Changed) { diff.Artists.Set(); } session.Save(ev); var namesChanged = new UpdateEventNamesQuery().UpdateNames(session, ev, contract.Series, contract.CustomName, contract.SeriesNumber, contract.SeriesSuffix, contract.Names); if (namesChanged) { session.Update(ev); } if (pictureData != null) { diff.MainPicture.Set(); SaveImage(ev, pictureData); session.Update(ev); } var archived = Archive(session, ev, diff, EntryEditEvent.Created, string.Empty); AddEntryEditedEntry(session.OfType <ActivityEntry>(), archived); session.AuditLogger.AuditLog(string.Format("created {0}", entryLinkFactory.CreateEntryLink(ev))); new FollowedArtistNotifier().SendNotifications(session, ev, ev.Artists.Where(a => a?.Artist != null).Select(a => a.Artist), PermissionContext.LoggedUser, entryLinkFactory, mailer, enumTranslations); } else { ev = session.Load(contract.Id); permissionContext.VerifyEntryEdit(ev); var diff = new ReleaseEventDiff(DoSnapshot(ev, session)); if (ev.Category != contract.Category) { diff.Category.Set(); } if (!ev.Date.Equals(contract.Date) || !ev.EndDate.Equals(contract.EndDate)) { diff.Date.Set(); } if (ev.Description != contract.Description) { diff.Description.Set(); } var inheritedLanguage = ev.Series == null || contract.CustomName ? contract.DefaultNameLanguage : ev.Series.TranslatedName.DefaultLanguage; if (ev.TranslatedName.DefaultLanguage != inheritedLanguage) { diff.OriginalName.Set(); } var namesChanged = new UpdateEventNamesQuery().UpdateNames(session, ev, contract.Series, contract.CustomName, contract.SeriesNumber, contract.SeriesSuffix, contract.Names); if (namesChanged) { diff.Names.Set(); } if (!ev.Series.NullSafeIdEquals(contract.Series)) { diff.Series.Set(); } if (ev.SeriesNumber != contract.SeriesNumber) { diff.SeriesNumber.Set(); } if (ev.SeriesSuffix != contract.SeriesSuffix) { diff.SeriesSuffix.Set(); } if (!ev.SongList.NullSafeIdEquals(contract.SongList)) { diff.SongList.Set(); } if (ev.Status != contract.Status) { diff.Status.Set(); } if (!string.Equals(ev.VenueName, contract.VenueName)) { diff.Venue.Set(); } ev.SetSeries(session.NullSafeLoad <ReleaseEventSeries>(contract.Series)); ev.Category = contract.Category; ev.CustomName = contract.CustomName; ev.Date = contract.Date; ev.Description = contract.Description; ev.EndDate = contract.EndDate > contract.Date ? contract.EndDate : null; ev.SeriesNumber = contract.SeriesNumber; ev.SeriesSuffix = contract.SeriesSuffix; ev.SongList = session.NullSafeLoad <SongList>(contract.SongList); ev.Status = contract.Status; ev.TranslatedName.DefaultLanguage = inheritedLanguage; ev.VenueName = contract.VenueName; var weblinksDiff = WebLink.Sync(ev.WebLinks, contract.WebLinks, ev); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } var pvDiff = ev.PVs.Sync(contract.PVs, ev.CreatePV); session.OfType <PVForAlbum>().Sync(pvDiff); if (pvDiff.Changed) { diff.PVs.Set(); } var artistDiff = ev.SyncArtists(contract.Artists, artistId => session.Load <Artist>(artistId)); if (artistDiff.Changed) { diff.Artists.Set(); } if (pictureData != null) { diff.MainPicture.Set(); SaveImage(ev, pictureData); } session.Update(ev); var archived = Archive(session, ev, diff, EntryEditEvent.Updated, string.Empty); AddEntryEditedEntry(session.OfType <ActivityEntry>(), archived); var logStr = string.Format("updated properties for {0} ({1})", entryLinkFactory.CreateEntryLink(ev), diff.ChangedFieldsString); session.AuditLogger.AuditLog(logStr); var newSongCutoff = TimeSpan.FromHours(1); if (artistDiff.Added.Any() && ev.CreateDate >= DateTime.Now - newSongCutoff) { var addedArtists = artistDiff.Added.Where(a => a.Artist != null).Select(a => a.Artist).Distinct().ToArray(); if (addedArtists.Any()) { new FollowedArtistNotifier().SendNotifications(session, ev, addedArtists, PermissionContext.LoggedUser, entryLinkFactory, mailer, enumTranslations); } } } return new ReleaseEventContract(ev, LanguagePreference); })); }
public static ArtistCategories GetCategories(IArtistWithSupport artist) { ParamIs.NotNull(() => artist); return(GetCategories(artist.Artist != null ? artist.Artist.ArtistType : ArtistType.Unknown, artist.Roles)); }
public int UpdateSeries(ReleaseEventSeriesForEditContract contract, EntryPictureFileContract pictureData) { ParamIs.NotNull(() => contract); PermissionContext.VerifyManageDatabase(); return(HandleTransaction(session => { ReleaseEventSeries series; if (contract.Id == 0) { series = new ReleaseEventSeries(contract.DefaultNameLanguage, contract.Names, contract.Description) { Category = contract.Category, Status = contract.Status }; session.Save(series); var diff = new ReleaseEventSeriesDiff(ReleaseEventSeriesEditableFields.OriginalName | ReleaseEventSeriesEditableFields.Names); diff.Description.Set(!string.IsNullOrEmpty(contract.Description)); var weblinksDiff = WebLink.Sync(series.WebLinks, contract.WebLinks, series); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } if (pictureData != null) { diff.Picture.Set(); SaveImage(series, pictureData); session.Update(series); } session.Update(series); Archive(session, series, diff, EntryEditEvent.Created, string.Empty); AuditLog(string.Format("created {0}", entryLinkFactory.CreateEntryLink(series)), session); } else { series = session.Load <ReleaseEventSeries>(contract.Id); permissionContext.VerifyEntryEdit(series); var diff = new ReleaseEventSeriesDiff(ReleaseEventSeriesEditableFields.Nothing); if (series.TranslatedName.DefaultLanguage != contract.DefaultNameLanguage) { series.TranslatedName.DefaultLanguage = contract.DefaultNameLanguage; diff.OriginalName.Set(); } var nameDiff = series.Names.Sync(contract.Names, series); session.Sync(nameDiff); if (nameDiff.Changed) { diff.Names.Set(); } if (series.Category != contract.Category) { diff.Category.Set(); series.Category = contract.Category; } if (series.Description != contract.Description) { diff.Description.Set(); series.Description = contract.Description; } if (series.Status != contract.Status) { diff.Status.Set(); series.Status = contract.Status; } if (pictureData != null) { diff.Picture.Set(); SaveImage(series, pictureData); } var weblinksDiff = WebLink.Sync(series.WebLinks, contract.WebLinks, series); if (weblinksDiff.Changed) { diff.WebLinks.Set(); session.OfType <ReleaseEventWebLink>().Sync(weblinksDiff); } session.Update(series); if (diff.Names.IsChanged || diff.OriginalName.IsChanged) { var eventNamesQuery = new UpdateEventNamesQuery(); foreach (var ev in series.Events.Where(e => !e.CustomName)) { eventNamesQuery.UpdateNames(session, ev, series, ev.CustomName, ev.SeriesNumber, ev.SeriesSuffix, ev.Names); session.Update(ev); } } Archive(session, series, diff, EntryEditEvent.Updated, string.Empty); AuditLog(string.Format("updated {0}", entryLinkFactory.CreateEntryLink(series)), session); } return series.Id; })); }
public AlbumForEditContract UpdateBasicProperties(AlbumForEditContract properties, EntryPictureFileContract pictureData) { ParamIs.NotNull(() => properties); return(repository.HandleTransaction(session => { var album = session.Load(properties.Id); VerifyEntryEdit(album); var diff = new AlbumDiff(DoSnapshot(album.ArchivedVersionsManager.GetLatestVersion(), session.OfType <User>().GetLoggedUser(PermissionContext))); session.AuditLogger.SysLog(string.Format("updating properties for {0}", album)); if (album.DiscType != properties.DiscType) { album.DiscType = properties.DiscType; album.UpdateArtistString(); diff.DiscType.Set(); } diff.Description.Set(album.Description.CopyFrom(properties.Description)); var parsedBarcodes = properties.Identifiers.Select(Album.ParseBarcode).ToArray(); var barcodeDiff = album.SyncIdentifiers(parsedBarcodes); session.Sync(barcodeDiff); if (barcodeDiff.Changed) { diff.Identifiers.Set(); } if (album.TranslatedName.DefaultLanguage != properties.DefaultNameLanguage) { album.TranslatedName.DefaultLanguage = properties.DefaultNameLanguage; diff.OriginalName.Set(); } var validNames = properties.Names; var nameDiff = album.Names.Sync(validNames, album); session.OfType <AlbumName>().Sync(nameDiff); album.Names.UpdateSortNames(); if (nameDiff.Changed) { diff.Names.Set(); } var webLinkDiff = WebLink.Sync(album.WebLinks, properties.WebLinks, album); session.OfType <AlbumWebLink>().Sync(webLinkDiff); if (webLinkDiff.Changed) { diff.WebLinks.Set(); } var newEvent = new CreateEventQuery().FindOrCreate(session, PermissionContext, properties.OriginalRelease.ReleaseEvent, album); var newOriginalRelease = (properties.OriginalRelease != null ? new AlbumRelease(properties.OriginalRelease, newEvent) : new AlbumRelease()); if (album.OriginalRelease == null) { album.OriginalRelease = new AlbumRelease(); } if (!album.OriginalRelease.Equals(newOriginalRelease)) { album.OriginalRelease = newOriginalRelease; diff.OriginalRelease.Set(); } // Required because of a bug in NHibernate NHibernateUtil.Initialize(album.CoverPictureData); if (pictureData != null) { var parsed = ImageHelper.GetOriginal(pictureData.UploadedFile, pictureData.ContentLength, pictureData.Mime); album.CoverPictureData = new PictureData(parsed); album.CoverPictureMime = parsed.Mime; pictureData.Id = album.Id; pictureData.EntryType = EntryType.Album; var thumbGenerator = new ImageThumbGenerator(imagePersister); thumbGenerator.GenerateThumbsAndMoveImage(pictureData.UploadedFile, pictureData, ImageSizes.Thumb | ImageSizes.SmallThumb | ImageSizes.TinyThumb); diff.Cover.Set(); } if (album.Status != properties.Status) { album.Status = properties.Status; diff.Status.Set(); } var artistGetter = new Func <ArtistContract, Artist>(artist => session.OfType <Artist>().Load(artist.Id)); var artistsDiff = album.SyncArtists(properties.ArtistLinks, artistGetter); session.OfType <ArtistForAlbum>().Sync(artistsDiff); if (artistsDiff.Changed) { diff.Artists.Set(); } var discsDiff = album.SyncDiscs(properties.Discs); session.OfType <AlbumDiscProperties>().Sync(discsDiff); if (discsDiff.Changed) { diff.Discs.Set(); } var songGetter = new Func <SongInAlbumEditContract, Song>(contract => { if (contract.SongId != 0) { return session.Load <Album, Song>(contract.SongId); } else { var songName = StringHelper.TrimIfNotWhitespace(contract.SongName); session.AuditLogger.SysLog(string.Format("creating a new song '{0}' to {1}", songName, album)); var song = new Song(new LocalizedString(songName, ContentLanguageSelection.Unspecified)); session.Save(song); var songDiff = new SongDiff(); songDiff.Names.Set(); var songArtistDiff = song.SyncArtists(contract.Artists, addedArtistContracts => GetArtists(session, addedArtistContracts)); if (songArtistDiff.Changed) { songDiff.Artists.Set(); session.Update(song); } session.Sync(songArtistDiff); var archived = ArchiveSong(session.OfType <Song>(), song, songDiff, SongArchiveReason.Created, string.Format("Created for album '{0}'", album.DefaultName.TruncateWithEllipsis(100))); session.AuditLogger.AuditLog(string.Format("created {0} for {1}", entryLinkFactory.CreateEntryLink(song), entryLinkFactory.CreateEntryLink(album))); AddEntryEditedEntry(session.OfType <ActivityEntry>(), song, EntryEditEvent.Created, archived); return song; } }); var tracksDiff = album.SyncSongs(properties.Songs, songGetter, (song, artistContracts) => UpdateSongArtists(session, song, artistContracts)); session.OfType <SongInAlbum>().Sync(tracksDiff); if (tracksDiff.Changed) { var add = string.Join(", ", tracksDiff.Added.Select(i => HttpUtility.HtmlEncode(i.SongToStringOrName))); var rem = string.Join(", ", tracksDiff.Removed.Select(i => HttpUtility.HtmlEncode(i.SongToStringOrName))); var edit = string.Join(", ", tracksDiff.Edited.Select(i => HttpUtility.HtmlEncode(i.SongToStringOrName))); var str = string.Format("edited tracks (added: {0}, removed: {1}, reordered: {2})", add, rem, edit) .Truncate(300); session.AuditLogger.AuditLog(str); diff.Tracks.Set(); } var picsDiff = album.Pictures.SyncPictures(properties.Pictures, session.OfType <User>().GetLoggedUser(PermissionContext), album.CreatePicture); session.OfType <AlbumPictureFile>().Sync(picsDiff); var entryPictureFileThumbGenerator = new ImageThumbGenerator(pictureFilePersister); album.Pictures.GenerateThumbsAndMoveImage(entryPictureFileThumbGenerator, picsDiff.Added, ImageSizes.Original | ImageSizes.Thumb); if (picsDiff.Changed) { diff.Pictures.Set(); } var pvDiff = album.SyncPVs(properties.PVs); session.OfType <PVForAlbum>().Sync(pvDiff); if (pvDiff.Changed) { diff.PVs.Set(); } var logStr = string.Format("updated properties for album {0} ({1})", entryLinkFactory.CreateEntryLink(album), diff.ChangedFieldsString) + (properties.UpdateNotes != string.Empty ? " " + properties.UpdateNotes : string.Empty) .Truncate(400); session.AuditLogger.AuditLog(logStr); var archivedAlbum = Archive(session, album, diff, AlbumArchiveReason.PropertiesUpdated, properties.UpdateNotes); session.Update(album); AddEntryEditedEntry(session.OfType <ActivityEntry>(), album, EntryEditEvent.Updated, archivedAlbum); var newSongCutoff = TimeSpan.FromHours(1); if (artistsDiff.Added.Any() && album.CreateDate >= DateTime.Now - newSongCutoff) { var addedArtists = artistsDiff.Added.Where(a => a.Artist != null).Select(a => a.Artist).Distinct().ToArray(); if (addedArtists.Any()) { new FollowedArtistNotifier().SendNotifications(session, album, addedArtists, PermissionContext.LoggedUser, entryLinkFactory, mailer, enumTranslations); } } return new AlbumForEditContract(album, PermissionContext.LanguagePreference, pictureFilePersister); })); }
public static string EntryDetails(this UrlHelper urlHelper, EntryForApiContract entry) { ParamIs.NotNull(() => entry); return(EntryDetails(urlHelper, entry.EntryType, entry.Id, entry.UrlSlug)); }
public virtual bool HasTag(Tag tag) { ParamIs.NotNull(() => tag); return(Usages.Any(u => u.Tag.Equals(tag))); }
public static string UserDetails(this UrlHelper urlHelper, IUser user) { ParamIs.NotNull(() => user); return(urlHelper.Action("Profile", "User", new { id = user.Name })); }
public virtual bool HasTag(string tagName) { ParamIs.NotNull(() => tagName); return(Usages.Any(u => u.Tag.Name.Equals(tagName))); }
public virtual SongName CreateName(string val, ContentLanguageSelection language) { ParamIs.NotNullOrEmpty(() => val); return(CreateName(new LocalizedString(val, language))); }
public SongDetails(SongDetailsContract contract, IUserPermissionContext userContext, PVHelper pvHelper) { ParamIs.NotNull(() => contract); Contract = contract; AdditionalNames = contract.AdditionalNames; Albums = contract.Albums; AlternateVersions = contract.AlternateVersions.Where(a => a.SongType != SongType.Original).ToArray(); ArtistString = contract.ArtistString; BrowsedAlbumId = contract.Album?.Id; CanEdit = EntryPermissionManager.CanEdit(userContext, contract.Song); CanEditPersonalDescription = contract.CanEditPersonalDescription; CanRemoveTagUsages = contract.CanRemoveTagUsages; CommentCount = contract.CommentCount; CreateDate = contract.CreateDate; DefaultLanguageSelection = contract.TranslatedName.DefaultLanguage; Deleted = contract.Deleted; Draft = contract.Song.Status == EntryStatus.Draft; FavoritedTimes = contract.Song.FavoritedTimes; Hits = contract.Hits; Id = contract.Song.Id; IsFavorited = contract.UserRating != SongVoteRating.Nothing; LatestComments = contract.LatestComments; Length = contract.Song.LengthSeconds; LikedTimes = contract.LikeCount; ListCount = contract.ListCount; Lyrics = contract.LyricsFromParents; MergedTo = contract.MergedTo; Name = contract.Song.Name; NicoId = contract.Song.NicoId; Notes = contract.Notes; OriginalVersion = (contract.Song.SongType != SongType.Original ? contract.OriginalVersion : null); Pools = contract.Pools; PublishDate = contract.Song.PublishDate; RatingScore = contract.Song.RatingScore; ReleaseEvent = contract.ReleaseEvent; PersonalDescriptionText = contract.PersonalDescriptionText; PersonalDescriptionAuthor = contract.PersonalDescriptionAuthor; SongType = contract.Song.SongType; SongTypeTag = contract.SongTypeTag; Status = contract.Song.Status; Suggestions = contract.Suggestions; Tags = contract.Tags; UserRating = contract.UserRating; WebLinks = contract.WebLinks.ToList(); ContentFocus = SongHelper.GetContentFocus(SongType); Animators = contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Animator)).ToArray(); Bands = contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Band)).ToArray(); Illustrators = ContentFocus == ContentFocus.Illustration ? contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Illustrator)).ToArray() : null; Performers = contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Vocalist)).ToArray(); Producers = contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Producer)).ToArray(); var subjectsForThis = contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Subject)).ToArray(); Subject = subjectsForThis.Any() ? subjectsForThis : contract.SubjectsFromParents; OtherArtists = contract.Artists.Where(a => a.Categories.HasFlag(ArtistCategories.Circle) || a.Categories.HasFlag(ArtistCategories.Label) || a.Categories.HasFlag(ArtistCategories.Other) || (ContentFocus != ContentFocus.Illustration && a.Categories.HasFlag(ArtistCategories.Illustrator))).ToArray(); var pvs = contract.PVs; OriginalPVs = pvs.Where(p => p.PVType == PVType.Original).ToArray(); OtherPVs = pvs.Where(p => p.PVType != PVType.Original).ToArray(); PrimaryPV = pvHelper.PrimaryPV(pvs); ThumbUrl = VideoServiceHelper.GetThumbUrlPreferNotNico(pvs); ThumbUrlMaxSize = VideoServiceHelper.GetMaxSizeThumbUrl(pvs) ?? ThumbUrl; if (PrimaryPV == null && !string.IsNullOrEmpty(NicoId)) { PrimaryPV = new PVContract { PVId = NicoId, Service = PVService.NicoNicoDouga } } ; if (pvs.All(p => p.Service != PVService.Youtube)) { var nicoPV = VideoServiceHelper.PrimaryPV(pvs, PVService.NicoNicoDouga); var query = HttpUtility.UrlEncode((nicoPV != null && !string.IsNullOrEmpty(nicoPV.Name)) ? nicoPV.Name : $"{ArtistString} {Name}"); WebLinks.Add(new WebLinkContract($"http://www.youtube.com/results?search_query={query}", ViewRes.Song.DetailsStrings.SearchYoutube, WebLinkCategory.Other, disabled: false)); } JsonModel = new SongDetailsAjax(this, contract.PreferredLyrics, contract.Song.Version); MinMilliBpm = contract.MinMilliBpm; MaxMilliBpm = contract.MaxMilliBpm; }
public virtual bool HasName(LocalizedString name) { ParamIs.NotNull(() => name); return(Names.HasName(name)); }
public TagBaseContract Update(TagForEditContract contract, UploadedFileContract uploadedImage) { ParamIs.NotNull(() => contract); PermissionContext.VerifyPermission(PermissionToken.EditTags); return(repository.HandleTransaction(ctx => { var tag = LoadTagById(ctx, contract.Id); permissionContext.VerifyEntryEdit(tag); var diff = new TagDiff(); if (tag.CategoryName != contract.CategoryName) { diff.CategoryName.Set(); } diff.Description.Set(tag.Description.CopyFrom(contract.Description)); if (tag.HideFromSuggestions != contract.HideFromSuggestions) { diff.HideFromSuggestions.Set(); } if (tag.Targets != contract.Targets) { diff.Targets.Set(); } if (tag.TranslatedName.DefaultLanguage != contract.DefaultNameLanguage) { tag.TranslatedName.DefaultLanguage = contract.DefaultNameLanguage; diff.OriginalName.Set(); } var nameDiff = SyncNames(ctx.OfType <TagName>(), tag, contract.Names); if (nameDiff.Changed) { diff.Names.Set(); } if (!Tag.Equals(tag.Parent, contract.Parent)) { var newParent = GetRealTag(ctx, contract.Parent, tag); if (!Equals(newParent, tag.Parent)) { diff.Parent.Set(); tag.SetParent(newParent); } } var relatedTagsDiff = tag.SyncRelatedTags(contract.RelatedTags, tagId => ctx.Load(tagId)); ctx.Sync(relatedTagsDiff); diff.RelatedTags.Set(relatedTagsDiff.Changed); var webLinkDiff = tag.WebLinks.Sync(contract.WebLinks, tag); ctx.OfType <TagWebLink>().Sync(webLinkDiff); if (webLinkDiff.Changed) { diff.WebLinks.Set(); } if (tag.Status != contract.Status) { diff.Status.Set(); } tag.CategoryName = contract.CategoryName; tag.HideFromSuggestions = contract.HideFromSuggestions; tag.Status = contract.Status; tag.Targets = contract.Targets; if (uploadedImage != null) { diff.Picture.Set(); var thumb = new EntryThumb(tag, uploadedImage.Mime); tag.Thumb = thumb; var thumbGenerator = new ImageThumbGenerator(imagePersister); thumbGenerator.GenerateThumbsAndMoveImage(uploadedImage.Stream, thumb, Tag.ImageSizes, originalSize: Constants.RestrictedImageOriginalSize); } var logStr = string.Format("updated properties for tag {0} ({1})", entryLinkFactory.CreateEntryLink(tag), diff.ChangedFieldsString); ctx.AuditLogger.AuditLog(logStr); var archived = Archive(ctx, tag, diff, EntryEditEvent.Updated, contract.UpdateNotes); AddEntryEditedEntry(ctx.OfType <ActivityEntry>(), tag, EntryEditEvent.Updated, archived); ctx.Update(tag); return new TagBaseContract(tag, LanguagePreference); })); }
public virtual bool HasWebLink(string url) { ParamIs.NotNull(() => url); return(WebLinks.Any(w => w.Url == url)); }
public virtual T GetTagUsage(Tag tag) { ParamIs.NotNull(() => tag); return Usages.FirstOrDefault(t => t.Tag.Equals(tag)); }
public virtual bool IsFavoritedBy(User user) { ParamIs.NotNull(() => user); return(UserFavorites.Any(a => a.User.Equals(user))); }
public virtual ArtistForAlbum AddArtist(Artist artist) { ParamIs.NotNull(() => artist); return(artist.AddAlbum(this)); }