Exemple #1
0
        public async Task CanGetMusic()
        {
            // ARRANGE
            string        id  = Guid.NewGuid().ToString();
            MusicDocument doc = new MusicDocument
            {
                Id     = id,
                Artist = "Linkin Park",
                Album  = "Meteora",
                ArtistAlphabetIndex = AlphabetType.L,
                IsFavorite          = true,
                Length      = 185, // 3 mins and 5 secs
                Title       = "Numb",
                Path        = "www.google.com/numb.mp3",
                CreatedDate = DateTime.UtcNow,
                UpdatedDate = DateTime.UtcNow
            };

            this._repo
            .Setup(m => m.GetMusicAsync(id))
            .ReturnsAsync(doc);

            // ACT
            MusicResponse response = await this._service.GetMusicAsync(id);

            // ASSERT
            Assert.NotNull(response);
            AssertEqual(expected: response, actual: doc);
            this._repo.Verify(m => m.GetMusicAsync(id), Times.Once);
        }
        /// <summary>
        /// Convert audio card as music resposne.
        /// Thumbnail image size limitation is not clear.
        /// </summary>
        /// <param name="activity">Message activity from bot.</param>
        /// <param name="attachment">An <see cref="Attachment"/> contains audio card content.</param>
        /// <returns>List of WeChat response message.</returns>
        private async Task <IList <IResponseMessageBase> > ProcessAudioCardAsync(IMessageActivity activity, Attachment attachment)
        {
            var messages  = new List <IResponseMessageBase>();
            var audioCard = attachment.ContentAs <AudioCard>();

            var body = audioCard.Subtitle;

            body = AddLine(body, audioCard.Text);
            var music = new Music
            {
                Title       = audioCard.Title,
                MusicUrl    = audioCard.Media[0].Url,
                HQMusicUrl  = audioCard.Media[0].Url,
                Description = body,
            };

            // upload thumbnail image.
            if (!string.IsNullOrEmpty(audioCard.Image?.Url))
            {
                var reponseList = await MediaContentToWeChatResponse(activity, audioCard.Image.Alt, audioCard.Image.Url, MediaTypes.Image).ConfigureAwait(false);

                if (reponseList is ImageResponse imageResponse)
                {
                    music.ThumbMediaId = imageResponse.Image.MediaId;
                }
            }

            var musicResponse = new MusicResponse(activity.From.Id, activity.Recipient.Id, music);

            messages.Add(musicResponse);
            messages.AddRange(ProcessCardActions(activity, audioCard.Buttons));

            return(messages);
        }
Exemple #3
0
 private void AssertEqual(MusicResponse expected, MusicDocument actual)
 {
     Assert.Equal(expected.Id, actual.Id);
     Assert.Equal(expected.Artist, actual.Artist);
     Assert.Equal(expected.ArtistAlphabetCategory, actual.ArtistAlphabetIndex);
     Assert.Equal(expected.IsFavorite, actual.IsFavorite);
     Assert.Equal(expected.Length, actual.Length);
     Assert.Equal(expected.Path, actual.Path);
     Assert.Equal(expected.Title, actual.Title);
 }
Exemple #4
0
        public List <Track> GetSongs(int albumId)
        {
            string results = _client.GetAlbumSongs(albumId);

            if (string.IsNullOrEmpty(results))
            {
                return(null);
            }

            MusicResponse musicResopnse = DeserializeContent(results);

            return(musicResopnse.Message.Body.AlbumTracks);
        }
Exemple #5
0
        public List <Album> GetAlbums(int artistId)
        {
            string results = _client.GetAlbums(artistId);

            if (string.IsNullOrEmpty(results))
            {
                return(null);
            }

            MusicResponse musicResopnse = DeserializeContent(results);

            return(musicResopnse.Message.Body.Albums);
        }
Exemple #6
0
        private void AssertEqual(MusicResponse expected, IEnumerable <MusicDocument> actual)
        {
            int foundCount = 0;

            MusicDocument doc = actual.FirstOrDefault(x => x.Id == expected.Id);

            if (doc != null)
            {
                AssertEqual(expected: expected, actual: doc);
                foundCount++;
            }

            Assert.Equal(foundCount, 1);
        }
Exemple #7
0
        public IActionResult Post(IFormFile file)
        {
            if (file == null && HttpContext.Request.Form.Files.Count > 0)
            {
                file = HttpContext.Request.Form.Files[0];
            }

            if (file == null)
            {
                Log.Error("File is missing");
                return(StatusCode(StatusCodes.Status400BadRequest, "Load file, please..."));
            }

            InfoResponse  response = new InfoResponse();
            MusicResponse music    = new MusicResponse();

            if (!file.FileName.EndsWith(".mp3"))
            {
                Log.Error("Failed format file, file not mp3");
                return(StatusCode(StatusCodes.Status400BadRequest, music));
            }

            using (Stream stream = file.OpenReadStream())
            {
                Log.Information($"Get info on file");
                response = _cloud.GetInfo(stream);
                Log.Information($"Return info on file");

                music.Title  = response.Title;
                music.Artist = response.Artist;
                Log.Information("Write info on music");
            }

            switch (response.Status)
            {
            case ResponseStatus.OK:
                return(StatusCode(StatusCodes.Status200OK, music));

            case ResponseStatus.NotFound:
                return(StatusCode(StatusCodes.Status404NotFound, music));

            case ResponseStatus.FileLarge:
                return(StatusCode(StatusCodes.Status413RequestEntityTooLarge, music));

            case ResponseStatus.FileSmall:
                return(StatusCode(StatusCodes.Status411LengthRequired, music));
            }

            return(StatusCode(StatusCodes.Status200OK, music));
        }
Exemple #8
0
        public Lyrics GetLyrics(int songId)
        {
            string results = _client.GetSongLyric(songId);

            if (string.IsNullOrEmpty(results))
            {
                return(null);
            }
            try
            {
                MusicResponse musicResopnse = DeserializeContent(results);
                return(musicResopnse.Message.Body.Lyrics);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"This song failed: {songId}");
                //throw;
                return(null);
            }
        }