Esempio n. 1
0
        public async Task <OperationResult <bool> > Delete(Library.Identity.User user, Guid id)
        {
            var sw = new Stopwatch();

            sw.Start();
            var genre = DbContext.Genres.FirstOrDefault(x => x.RoadieId == id);

            if (genre == null)
            {
                return(new OperationResult <bool>(true, string.Format("Genre Not Found [{0}]", id)));
            }
            DbContext.Genres.Remove(genre);
            await DbContext.SaveChangesAsync();

            var genreImageFilename = genre.PathToImage(Configuration);

            if (File.Exists(genreImageFilename))
            {
                File.Delete(genreImageFilename);
            }

            Logger.LogWarning("User `{0}` deleted Genre `{1}]`", user, genre);
            CacheManager.ClearRegion(genre.CacheRegion);
            sw.Stop();
            return(new OperationResult <bool>
            {
                IsSuccess = true,
                Data = true,
                OperationTime = sw.ElapsedMilliseconds
            });
        }
Esempio n. 2
0
        public async Task <OperationResult <bool> > Delete(Library.Identity.User user, Guid id)
        {
            var sw = new Stopwatch();

            sw.Start();
            var label = DbContext.Labels.FirstOrDefault(x => x.RoadieId == id);

            if (label == null)
            {
                return(new OperationResult <bool>(true, string.Format("Label Not Found [{0}]", id)));
            }
            DbContext.Labels.Remove(label);
            await DbContext.SaveChangesAsync();

            var labelImageFilename = label.PathToImage(Configuration);

            if (File.Exists(labelImageFilename))
            {
                File.Delete(labelImageFilename);
            }
            await BookmarkService.RemoveAllBookmarksForItem(BookmarkType.Label, label.Id);

            Logger.LogWarning("User `{0}` deleted Label `{1}]`", user, label);
            CacheManager.ClearRegion(label.CacheRegion);
            sw.Stop();
            return(new OperationResult <bool>
            {
                IsSuccess = true,
                Data = true,
                OperationTime = sw.ElapsedMilliseconds
            });
        }
Esempio n. 3
0
        private async Task <OperationResult <bool> > UpdateLastFMSessionKey(Library.Identity.User user, string token)
        {
            var lastFmSessionKeyResult = await LastFmHelper.GetSessionKeyForUserToken(token).ConfigureAwait(false);

            if (!lastFmSessionKeyResult.IsSuccess)
            {
                return(new OperationResult <bool>(false, $"Unable to Get LastFM Session Key For Token [{token}]"));
            }
            // Check concurrency stamp
            if (user.ConcurrencyStamp != user.ConcurrencyStamp)
            {
                return(new OperationResult <bool>
                {
                    Errors = new List <Exception> {
                        new Exception("User data is stale.")
                    }
                });
            }

            user.LastFMSessionKey = lastFmSessionKeyResult.Data;
            user.LastUpdated      = DateTime.UtcNow;
            user.ConcurrencyStamp = Guid.NewGuid().ToString();
            await DbContext.SaveChangesAsync().ConfigureAwait(false);

            CacheManager.ClearRegion(Library.Identity.User.CacheRegionUrn(user.RoadieId));

            Logger.LogTrace($"User `{user}` Updated LastFm SessionKey");

            return(new OperationResult <bool>
            {
                IsSuccess = true,
                Data = true
            });
        }
Esempio n. 4
0
        private async Task <OperationResult <bool> > SetBookmark(Library.Identity.User user, BookmarkType bookmarktype, int bookmarkTargetId, bool isBookmarked)
        {
            var bookmark = DbContext.Bookmarks.FirstOrDefault(x => x.BookmarkTargetId == bookmarkTargetId &&
                                                              x.BookmarkType == bookmarktype &&
                                                              x.UserId == user.Id);

            if (!isBookmarked)
            {
                // Remove bookmark
                if (bookmark != null)
                {
                    DbContext.Bookmarks.Remove(bookmark);
                    await DbContext.SaveChangesAsync().ConfigureAwait(false);
                }
            }
            else
            {
                // Add bookmark
                if (bookmark == null)
                {
                    await DbContext.Bookmarks.AddAsync(new data.Bookmark
                    {
                        UserId           = user.Id,
                        BookmarkTargetId = bookmarkTargetId,
                        BookmarkType     = bookmarktype,
                        CreatedDate      = DateTime.UtcNow,
                        Status           = Statuses.Ok
                    }).ConfigureAwait(false);

                    await DbContext.SaveChangesAsync().ConfigureAwait(false);
                }
            }

            CacheManager.ClearRegion(user.CacheRegion);

            return(new OperationResult <bool>
            {
                IsSuccess = true,
                Data = true
            });
        }
Esempio n. 5
0
        public async Task <OperationResult <bool> > MergeLabelsIntoLabel(Library.Identity.User user, Guid intoLabelId, IEnumerable <Guid> labelIdsToMerge)
        {
            var sw = new Stopwatch();

            sw.Start();

            var errors = new List <Exception>();
            var label  = DbContext.Labels.FirstOrDefault(x => x.RoadieId == intoLabelId);

            if (label == null)
            {
                return(new OperationResult <bool>(true, string.Format("Merge Into Label Not Found [{0}]", intoLabelId)));
            }

            var now           = DateTime.UtcNow;
            var labelsToMerge = (from l in DbContext.Labels
                                 join ltm in labelIdsToMerge on l.RoadieId equals ltm
                                 select l);

            foreach (var labelToMerge in labelsToMerge)
            {
                label.MusicBrainzId = label.MusicBrainzId ?? labelToMerge.MusicBrainzId;
                label.SortName      = label.SortName ?? labelToMerge.SortName;
                label.Profile       = label.Profile ?? labelToMerge.Profile;
                label.BeginDate     = label.BeginDate ?? labelToMerge.BeginDate;
                label.EndDate       = label.EndDate ?? labelToMerge.EndDate;
                label.Profile       = label.Profile ?? labelToMerge.Profile;
                label.DiscogsId     = label.DiscogsId ?? labelToMerge.DiscogsId;
                label.ImageUrl      = label.ImageUrl ?? labelToMerge.ImageUrl;
                label.Tags          = label.Tags.AddToDelimitedList(labelToMerge.Tags.ToListFromDelimited());
                var altNames = labelToMerge.AlternateNames.ToListFromDelimited().ToList();
                altNames.Add(labelToMerge.Name);
                altNames.Add(labelToMerge.SortName);
                altNames.Add(labelToMerge.Name.ToAlphanumericName());
                label.AlternateNames = label.AlternateNames.AddToDelimitedList(altNames);
                label.URLs           = label.URLs.AddToDelimitedList(labelToMerge.URLs.ToListFromDelimited());

                var labelToMergeReleases = (from rl in DbContext.ReleaseLabels
                                            where rl.LabelId == labelToMerge.Id
                                            select rl);
                foreach (var labelToMergeRelease in labelToMergeReleases)
                {
                    labelToMergeRelease.LabelId     = label.Id;
                    labelToMergeRelease.LastUpdated = now;
                }
                label.LastUpdated = now;
                await DbContext.SaveChangesAsync();
            }
            await UpdateLabelCounts(label.Id, now);

            CacheManager.ClearRegion(label.CacheRegion);
            Logger.LogInformation($"MergeLabelsIntoLabel `{label}`, Merged Label Ids [{ string.Join(",", labelIdsToMerge) }] By User `{user}`");

            sw.Stop();
            return(new OperationResult <bool>
            {
                IsSuccess = !errors.Any(),
                Data = !errors.Any(),
                OperationTime = sw.ElapsedMilliseconds,
                Errors = errors
            });
        }