Beispiel #1
0
        public static ApiModels.Album GetAlbum(DataModels.Album album)
        {
            if (album == null)
            {
                return(null);
            }

            return(new ApiModels.Album()
            {
                Id = album.VkId,
                Title = album.Title,
            });
        }
Beispiel #2
0
        public async Task <Album> AddAsync(Album newAlbum, CancellationToken ct = default(CancellationToken))
        {
            var album = new DataModels.Album
            {
                Title    = newAlbum.Title,
                ArtistId = newAlbum.ArtistId
            };

            _context.Album.Add(album);
            await _context.SaveChangesAsync(ct);

            newAlbum.AlbumId = album.AlbumId;
            return(newAlbum);
        }
Beispiel #3
0
        public ApiResponse <object> LoadAudios(DataModels.User user)
        {
            //get and remove all current user's albums/audios
            List <DataModels.Album> dataAlbumList = _dbContext.Albums.Where(x => x.UserId == user.Id).ToList();
            List <DataModels.Audio> dataAudioList = _dbContext.Audios.Where(x => x.UserId == user.Id).ToList();

            IEnumerable <int> audioIdList = dataAudioList.Select(x => x.VkId);

            List <DataModels.MixAudio> mixDataAudioList = _dbContext.MixAudios.Where(x => audioIdList.Contains(x.AudioId)).ToList();

            //Task loadAlbums = Task.Run(() =>
            //    dataAlbumList = _dbContext.Albums.Where(x => x.UserId == user.Id).ToList());

            //Task loadAudios = Task.Run(() =>
            //    dataAudioList = _dbContext.Audios.Where(x => x.UserId == user.Id).ToList());

            //await Task.WhenAll(loadAlbums, loadAudios);


            _dbContext.MixAudios.RemoveRange(mixDataAudioList);
            _dbContext.Audios.RemoveRange(dataAudioList);
            _dbContext.Albums.RemoveRange(dataAlbumList);

            //download all (okey, 6000)
            VkModels.AlbumEtity vkAlbumEntity = null;
            VkModels.AudioEtity vkAudioEntity = null;

            try
            {
                vkAlbumEntity = _vkWebService.GetAlbums(user.AccessToken, 100);
            } catch (Exception ex)
            {
                return(new ApiResponse <object>(ex.Message));
            }

            try
            {       //TODO: mb add few Tasks for better perform? Need to check
                vkAudioEntity = _vkWebService.GetAudios(user.AccessToken, 6000);
            } catch (Exception ex)
            {
                return(new ApiResponse <object>(ex.Message));
            }

            //album errors
            if (vkAlbumEntity.error != null)
            {
                return(new ApiResponse <object>(vkAlbumEntity.error?.error_msg));
            }
            if (vkAlbumEntity.response == null)
            {
                return(new ApiResponse <object>("Album response is null"));
            }
            //audio errors
            if (vkAudioEntity.error != null)
            {
                return(new ApiResponse <object>(vkAudioEntity.error?.error_msg));
            }
            if (vkAudioEntity.response == null)
            {
                return(new ApiResponse <object>("Audio response is null"));
            }

            user.AlbumsCount             = vkAlbumEntity.response.items.Count();
            user.AudiosCount             = vkAudioEntity.response.items.Count();
            _dbContext.Entry(user).State = System.Data.Entity.EntityState.Modified;

            //map albums
            IEnumerable <DataModels.Album> albums = vkAlbumEntity
                                                    .response
                                                    .items
                                                    .Select(x =>
            {
                DataModels.Album dataAlbum = VkMapper.GetAlbum(x);
                dataAlbum.UserId           = user.Id;
                return(dataAlbum);
            });

            //map musics
            var audioList = new List <DataModels.Audio>(vkAudioEntity.response.items.Count());

            for (int i = 0; i < vkAudioEntity.response.items.Count(); i++)
            {
                var mappedAudio = VkMapper.GetAudio(vkAudioEntity.response.items.ElementAt(i));
                mappedAudio.Order  = i + 1;
                mappedAudio.UserId = user.Id;

                audioList.Add(mappedAudio);
            }

            //add ranges and save changes
            _dbContext.Albums.AddRange(albums);
            _dbContext.SaveChanges();

            foreach (var aud in audioList)
            {
                DataModels.Album album = _dbContext.Albums.Local.FirstOrDefault(x => aud.AlbumId == x.VkId);
                if (album != null)
                {
                    aud.AlbumId = album.Id;
                }
            }

            _dbContext.Audios.AddRange(audioList);
            _dbContext.SaveChanges();

            return(new ApiResponse <object>()
            {
                Ok = true
            });
        }