示例#1
0
        /// <summary>
        /// プレイリストを生成する(スレッド)
        /// </summary>
        private void CreatePlaylistProc()
        {
            SetupConnection();
            while (true)
            {
                try
                {
                    CreatePlaylistRequest req;
                    if (Request.QueryText == null)
                    {
                        Thread.Sleep(System.Threading.Timeout.Infinite);
                    }

                    //createPlaylistからinterruptが連続で発行されたとき、このsleep内で捕捉する
                    Thread.Sleep(10);

                    req     = Request;
                    Request = new CreatePlaylistRequest();

                    CreatePlaylistTableInDB(req.QueryText);
                    Controller._PlaylistUpdated(req.IsReloadOnly ? null : req.QueryText);
                    if (req.PlayOnCreate)
                    {
                        AppCore.PlayPlaylistItem(0);
                    }
                }
                catch (ThreadInterruptedException) { }
            }
        }
示例#2
0
        public async Task ShouldCreatePlaylistWithAllParams()
        {
            // Arrange
            var request = new CreatePlaylistRequest()
            {
                Name          = "Test Playlist",
                Description   = "Test Playlist Description",
                Collaborative = true,
                Public        = true
            };

            this.MockHttp
            .ExpectSpotifyRequest(HttpMethod.Post, $"users/{TestsBase.UserId}/playlists")
            .WithExactQueryString(string.Empty)
            .WithJsonContent(j =>
                             j.EnumerateObject().Count() == 4 &&
                             j.TryGetProperty("name", out var name) && name.GetString() == request.Name &&
                             j.TryGetProperty("description", out var description) && description.GetString() == request.Description &&
                             j.TryGetProperty("collaborative", out var collaborative) && collaborative.GetBoolean() == request.Collaborative &&
                             j.TryGetProperty("public", out var @public) && @public.GetBoolean() == request.Public)
            .Respond(HttpStatusCode.OK, "application/json", "{}");

            // Act
            var builder = this.GetPlaylistsBuilder();
            var result  = await builder.CreateAsync(request);

            // Assert
            this.MockHttp.VerifyNoOutstandingExpectation();
            result.Should().NotBeNull();
        }
示例#3
0
 /// <summary>
 /// プレイリストを生成
 /// </summary>
 /// <param name="query">クエリ</param>
 /// <param name="playOnCreate">生成後に再生開始</param>
 internal void CreatePlaylist(string query, bool playOnCreate = false)
 {
     Logger.Log("createPlaylist " + query);
     Request = new CreatePlaylistRequest(query: query, playOnCreate: playOnCreate);
     LibraryDB.interrupt();
     PlaylistCreateThread.Interrupt();
 }
示例#4
0
        public async Task <ValidationResponse> CreatePlayListAsync(CreatePlaylistRequest request)
        {
            var response = new ValidationResponse {
                Success = true, HttpStatusCode = 200
            };

            spotifyApi = new SpotifyWebAPI
            {
                AccessToken = request.AccessToken,
                TokenType   = request.TokenType
            };
            var userId = await spotifyApi.GetPrivateProfileAsync();

            var playlist = await spotifyApi.CreatePlaylistAsync(userId.Id, $"SpotifyTree - {request.PlaylistName}");

            var addToPlaylist = await spotifyApi.AddPlaylistTracksAsync(playlist.Id, request.SongIds.ToList());

            if (addToPlaylist.Error != null)
            {
                response.Success        = false;
                response.Message        = addToPlaylist.Error.Message;
                response.StatusCode     = addToPlaylist.Error.Status;
                response.HttpStatusCode = (int)addToPlaylist.StatusCode();
            }
            return(response);
        }
示例#5
0
        public PlaylistResult CreatePlaylist([FromBody] CreatePlaylistRequest request)
        {
            CheckTokenResult checkTokenResult = _authService.CheckToken(AccessToken);

            if (!checkTokenResult.Ok)
            {
                return(new PlaylistResult(checkTokenResult));
            }

            return(_playlistService.CreatePlaylist(checkTokenResult.AuthToken.UserId, request));
        }
示例#6
0
        public async Task <IActionResult> CreatePlaylist([FromBody] CreatePlaylistRequest request)
        {
            var response = await _crawler.CreatePlayListAsync(request);

            if (response.Success)
            {
                return(Ok());
            }
            else
            {
                return(BadRequest($"Error while creating playlist: {response.Message}; StatusCode: {response.StatusCode}"));
            }
        }
        public async Task <ActionResult> Create([FromBody] CreatePlaylistRequest request)
        {
            var entity = new Playlist
            {
                Name     = request.Name,
                IsPublic = request.IsPublic,
                OwnerId  = UserId.Value
            };

            entity = _dbContext.Playlist.Add(entity).Entity;

            _dbContext.SaveChanges();

            return(CreatedAtAction(nameof(Create), entity));
        }
示例#8
0
        public static Playlist CreatePlayList(SpotifyTokens spotifyTokens, string userId, string listName)
        {
            var client = GetClient();

            client.Headers.Add("Authorization", "Bearer " + spotifyTokens.AccessToken);
            client.Headers.Add("Content-Type", "application/json");

            var request = new CreatePlaylistRequest
            {
                Name   = listName,
                Public = true
            };
            var serializedRequest = JsonConvert.SerializeObject(request);
            var urlToCall         = string.Format(Constants.SpotifyUrls.SpotifyUsersPlaylistsUrlWithPlaceholder, userId);

            var result       = client.UploadString(urlToCall, serializedRequest);
            var deserialized = Newtonsoft.Json.JsonConvert.DeserializeObject <Playlist>(result);

            return(deserialized);
        }
示例#9
0
        public async Task ShouldCreatePlaylist()
        {
            // Arrange
            var request = new CreatePlaylistRequest()
            {
                Name = "Test Playlist"
            };

            this.MockHttp
            .ExpectSpotifyRequest(HttpMethod.Post, $"users/{TestsBase.UserId}/playlists")
            .WithExactQueryString(string.Empty)
            .WithJsonContent(j => j.EnumerateObject().Count() == 1 && j.TryGetProperty("name", out var name) && name.GetString() == request.Name)
            .Respond(HttpStatusCode.OK, "application/json", "{}");

            // Act
            var builder = this.GetPlaylistsBuilder();
            var result  = await builder.CreateAsync(request);

            // Assert
            this.MockHttp.VerifyNoOutstandingExpectation();
            result.Should().NotBeNull();
        }
示例#10
0
        public PlaylistResult CreatePlaylist(Guid userId, CreatePlaylistRequest request)
        {
            return(BaseInvokeCheckModel(request, () =>
            {
                var playlist = new DataModel.Playlist()
                {
                    Id = Guid.NewGuid(),
                    IsGeneral = false,
                    OrderValue = 0,
                    OwnerId = userId,
                    Title = request.Title,
                };

                _dbContext.Playlists.Add(playlist);
                _dbContext.SaveChanges();

                return ResponseBuilder <PlaylistResult> .SuccessBuild(new PlaylistResult()
                {
                    Playlist = PlaylistMapper.ToApi.FromData(playlist),
                });
            }));
        }
示例#11
0
        public async Task <IActionResult> SpotParams([FromBody] CreatePlaylistRequest spotParams)
        {
            //get auth cookie
            HttpContext.Request.Cookies.TryGetValue("spotauthtoke", out string auth);

            if (!string.IsNullOrEmpty(spotParams.Id))
            {
                spotParams.AudioFeatures = true;
            }

            spotParams.Tempo   = string.IsNullOrEmpty(spotParams.Tempo) ? null : spotParams.Tempo.Trim();
            spotParams.Dance   = string.IsNullOrEmpty(spotParams.Dance) ? null : spotParams.Dance.Trim();
            spotParams.Energy  = string.IsNullOrEmpty(spotParams.Energy) ? null : spotParams.Energy.Trim();
            spotParams.Valence = string.IsNullOrEmpty(spotParams.Valence) ? null : spotParams.Valence.Trim();

            //jsonify params
            var jsonParams = JsonSerializer.Serialize(spotParams);
            //send to spot api
            var res = await _sas.Access("post", auth, "/Create", jsonParams).ConfigureAwait(true);

            //get the response and be able to return a partial view
            var playlistResponse = JsonSerializer.Deserialize <PlaylistResponse>(res, null);

            if (playlistResponse.TrackCount == 0)
            {
                playlistResponse.Title = "Huh, maybe delete this one, nothing was added for " + playlistResponse.Title;
            }

            if (playlistResponse.Length < spotParams.Length * .90)
            {
                playlistResponse.Title = "Just FYI, your choices allowed " + playlistResponse.Title + " to not fully populate";
            }

            //returns okay response with a redirect to viewing the tracks?
            return(PartialView("ViewPlaylists", new List <PlaylistResponse>()
            {
                playlistResponse
            }));
        }
示例#12
0
        public Task <Playlist> CreateAsync(CreatePlaylistRequest createPlaylistRequest, CancellationToken cancellationToken)
        {
            SpotifyArgumentAssertUtils.ThrowIfNull(createPlaylistRequest, nameof(createPlaylistRequest));

            return(this.SendBodyAsync <CreatePlaylistRequest, Playlist>(HttpMethod.Post, createPlaylistRequest, cancellationToken));
        }
示例#13
0
        public async Task <JsonResult> CreatePlaylist([FromBody] CreatePlaylistRequest req)
        {
            string ClaimsUserID = User.Claims.FirstOrDefault()?.Value;

            return(new JsonResult(await _playlist.CreatePlaylist(req.Name, ClaimsUserID, req.Favourite)));
        }
示例#14
0
 public abstract Task <Response <Playlist, object> > CreatePlaylist(CreatePlaylistRequest request);
示例#15
0
 /// <summary>
 /// 直前に生成したプレイリストと同クエリでプレイリストを再生成
 /// </summary>
 internal void RefreshPlaylist()
 {
     Request = new CreatePlaylistRequest(query: LatestPlaylistQueryExpanded, isReloadOnly: true);
     LibraryDB.interrupt();
     PlaylistCreateThread.Interrupt();
 }