Made responses have public setters - needed for testing - removed old projects

This commit is contained in:
Jonas Dellinger 2020-05-08 10:25:33 +02:00
parent a82f95f0d0
commit bf4c817e70
106 changed files with 345 additions and 40073 deletions

View File

@ -13,11 +13,11 @@ indent_size = 2
indent_size = 2 indent_size = 2
[*.{cs,vb}] [*.{cs,vb}]
# Does not seem to work...
dotnet_diagnostic.CA1303.severity = none dotnet_diagnostic.CA1303.severity = none
dotnet_diagnostic.CA1056.severity = none dotnet_diagnostic.CA1056.severity = none
dotnet_diagnostic.CA1034.severity = none dotnet_diagnostic.CA1034.severity = none
dotnet_diagnostic.CA1054.severity = none dotnet_diagnostic.CA1054.severity = none
dotnet_diagnostic.CA2227.severity = none
# Sort using and Import directives with System.* appearing first # Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true dotnet_sort_system_directives_first = true
dotnet_style_require_accessibility_modifiers = always:warning dotnet_style_require_accessibility_modifiers = always:warning

View File

@ -1,33 +0,0 @@
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SpotifyAPI.Web.Examples.ASP.Models;
namespace SpotifyAPI.Web.Examples.ASP.Controllers
{
[Authorize(AuthenticationSchemes = "Spotify")]
public class HomeController : Controller
{
public IActionResult Index()
{
// var accessToken = await HttpContext.GetTokenAsync("Spotify", "access_token");
// SpotifyWebAPI api = new SpotifyWebAPI
// {
// AccessToken = accessToken,
// TokenType = "Bearer"
// };
// var savedTracks = await api.GetSavedTracksAsync(50);
return View(new IndexModel { SavedTracks = null });
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}

View File

@ -1,11 +0,0 @@
using System;
namespace SpotifyAPI.Web.Examples.ASP.Models
{
public class ErrorViewModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}

View File

@ -1,10 +0,0 @@
using System;
using SpotifyAPI.Web.Models;
namespace SpotifyAPI.Web.Examples.ASP.Models
{
public class IndexModel
{
public Paging<object> SavedTracks;
}
}

View File

@ -1,26 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace SpotifyAPI.Web.Examples.ASP
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}

View File

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:55802",
"sslPort": 44320
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"SpotifyAPI.Web.Examples.ASP": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -1,16 +0,0 @@
# ASP.NET Core Spotify Example
This project provides an example ASP .NET Core Web Application, which utilizes `SpotifyAPI.Web` and `AspNet.Security.OAuth.Spotify` to authenticate the user from Spotify and retrieve his saved library tracks.
## Important files/lines
Most of the important configuration is inside of `Startup.cs`. It reads the `client_id` and `client_secret` from the configration store, so make sure you run the following commands in the project directory:
```
dotnet user-secrets set client_secret YOUR_CLIENT_SECRET
dotnet user-secrets set client_id YOUR_CLIENT_ID
```
Also, it specifies the callback URL (`/callback`). This has to be registered in your Spotify App Settings (`http://localhost:5000/callback`)
The actual request to Spotify and making sure that the user is authenticated happens in `Controllers/HomeController.cs`, which should be self explanatory.

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UserSecretsId>201e6943-a5b3-473c-b1da-a579b36ca283</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\SpotifyAPI.Web\SpotifyAPI.Web.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AspNet.Security.OAuth.Spotify" Version="3.0.0" />
</ItemGroup>
</Project>

View File

@ -1,67 +0,0 @@
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace SpotifyAPI.Web.Examples.ASP
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddAuthentication(o => o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie()
.AddSpotify(options =>
{
// var scopes = Scope.UserLibraryRead | Scope.UserModifyPlaybackState;
// options.Scope.Add(scopes.GetStringAttribute(","));
options.SaveTokens = true;
options.ClientId = Configuration["client_id"];
options.ClientSecret = Configuration["client_secret"];
options.CallbackPath = "/callback";
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
// app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}

View File

@ -1,15 +0,0 @@
@model IndexModel
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
You have @Model.SavedTracks.Total saved tracks in your library! Here are 50 of them:
@* <ul>
@foreach (var item in Model.SavedTracks.Items)
{
<li>@item.Track.Name</li>
}
</ul> *@
</div>

View File

@ -1,25 +0,0 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View File

@ -1,38 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - SpotifyAPI.Web.Examples.ASP</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">SpotifyAPI.Web.Examples.ASP</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
&copy; 2019 - SpotifyAPI.Web.Examples.ASP - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
</body>
</html>

View File

@ -1,2 +0,0 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

View File

@ -1,3 +0,0 @@
@using SpotifyAPI.Web.Examples.ASP
@using SpotifyAPI.Web.Examples.ASP.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View File

@ -1,3 +0,0 @@
@{
Layout = "_Layout";
}

View File

@ -1,9 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}

View File

@ -1,10 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

View File

@ -1,71 +0,0 @@
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
/* Provide sufficient contrast against white background */
a {
color: #0366d6;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
/* Sticky footer styles
-------------------------------------------------- */
html {
font-size: 14px;
}
@media (min-width: 768px) {
html {
font-size: 16px;
}
}
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}
.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}
button.accept-policy {
font-size: 1rem;
line-height: inherit;
}
/* Sticky footer styles
-------------------------------------------------- */
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px; /* Vertically center the text there */
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1,4 +0,0 @@
// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.
// Write your JavaScript code.

View File

@ -1,22 +0,0 @@
The MIT License (MIT)
Copyright (c) 2011-2018 Twitter, Inc.
Copyright (c) 2011-2018 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,331 +0,0 @@
/*!
* Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
}
[tabindex="-1"]:focus {
outline: 0 !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none;
}
a:not([href]):not([tabindex]):focus {
outline: 0;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg {
overflow: hidden;
vertical-align: middle;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #6c757d;
text-align: left;
caption-side: bottom;
}
th {
text-align: inherit;
}
label {
display: inline-block;
margin-bottom: 0.5rem;
}
button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
select {
word-wrap: normal;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button:not(:disabled),
[type="button"]:not(:disabled),
[type="reset"]:not(:disabled),
[type="submit"]:not(:disabled) {
cursor: pointer;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
padding: 0;
margin-bottom: .5rem;
font-size: 1.5rem;
line-height: inherit;
color: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
cursor: pointer;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

View File

@ -1,8 +0,0 @@
/*!
* Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,12 +0,0 @@
Copyright (c) .NET Foundation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
these files except in compliance with the License. You may obtain a copy of the
License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.

View File

@ -1,432 +0,0 @@
// Unobtrusive validation support library for jQuery and jQuery Validate
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// @version v3.2.11
/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
/*global document: false, jQuery: false */
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define("jquery.validate.unobtrusive", ['jquery-validation'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports
module.exports = factory(require('jquery-validation'));
} else {
// Browser global
jQuery.validator.unobtrusive = factory(jQuery);
}
}(function ($) {
var $jQval = $.validator,
adapters,
data_validation = "unobtrusiveValidation";
function setValidationValues(options, ruleName, value) {
options.rules[ruleName] = value;
if (options.message) {
options.messages[ruleName] = options.message;
}
}
function splitAndTrim(value) {
return value.replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g);
}
function escapeAttributeValue(value) {
// As mentioned on http://api.jquery.com/category/selectors/
return value.replace(/([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
}
function getModelPrefix(fieldName) {
return fieldName.substr(0, fieldName.lastIndexOf(".") + 1);
}
function appendModelPrefix(value, prefix) {
if (value.indexOf("*.") === 0) {
value = value.replace("*.", prefix);
}
return value;
}
function onError(error, inputElement) { // 'this' is the form element
var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null;
container.removeClass("field-validation-valid").addClass("field-validation-error");
error.data("unobtrusiveContainer", container);
if (replace) {
container.empty();
error.removeClass("input-validation-error").appendTo(container);
}
else {
error.hide();
}
}
function onErrors(event, validator) { // 'this' is the form element
var container = $(this).find("[data-valmsg-summary=true]"),
list = container.find("ul");
if (list && list.length && validator.errorList.length) {
list.empty();
container.addClass("validation-summary-errors").removeClass("validation-summary-valid");
$.each(validator.errorList, function () {
$("<li />").html(this.message).appendTo(list);
});
}
}
function onSuccess(error) { // 'this' is the form element
var container = error.data("unobtrusiveContainer");
if (container) {
var replaceAttrValue = container.attr("data-valmsg-replace"),
replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null;
container.addClass("field-validation-valid").removeClass("field-validation-error");
error.removeData("unobtrusiveContainer");
if (replace) {
container.empty();
}
}
}
function onReset(event) { // 'this' is the form element
var $form = $(this),
key = '__jquery_unobtrusive_validation_form_reset';
if ($form.data(key)) {
return;
}
// Set a flag that indicates we're currently resetting the form.
$form.data(key, true);
try {
$form.data("validator").resetForm();
} finally {
$form.removeData(key);
}
$form.find(".validation-summary-errors")
.addClass("validation-summary-valid")
.removeClass("validation-summary-errors");
$form.find(".field-validation-error")
.addClass("field-validation-valid")
.removeClass("field-validation-error")
.removeData("unobtrusiveContainer")
.find(">*") // If we were using valmsg-replace, get the underlying error
.removeData("unobtrusiveContainer");
}
function validationInfo(form) {
var $form = $(form),
result = $form.data(data_validation),
onResetProxy = $.proxy(onReset, form),
defaultOptions = $jQval.unobtrusive.options || {},
execInContext = function (name, args) {
var func = defaultOptions[name];
func && $.isFunction(func) && func.apply(form, args);
};
if (!result) {
result = {
options: { // options structure passed to jQuery Validate's validate() method
errorClass: defaultOptions.errorClass || "input-validation-error",
errorElement: defaultOptions.errorElement || "span",
errorPlacement: function () {
onError.apply(form, arguments);
execInContext("errorPlacement", arguments);
},
invalidHandler: function () {
onErrors.apply(form, arguments);
execInContext("invalidHandler", arguments);
},
messages: {},
rules: {},
success: function () {
onSuccess.apply(form, arguments);
execInContext("success", arguments);
}
},
attachValidation: function () {
$form
.off("reset." + data_validation, onResetProxy)
.on("reset." + data_validation, onResetProxy)
.validate(this.options);
},
validate: function () { // a validation function that is called by unobtrusive Ajax
$form.validate();
return $form.valid();
}
};
$form.data(data_validation, result);
}
return result;
}
$jQval.unobtrusive = {
adapters: [],
parseElement: function (element, skipAttach) {
/// <summary>
/// Parses a single HTML element for unobtrusive validation attributes.
/// </summary>
/// <param name="element" domElement="true">The HTML element to be parsed.</param>
/// <param name="skipAttach" type="Boolean">[Optional] true to skip attaching the
/// validation to the form. If parsing just this single element, you should specify true.
/// If parsing several elements, you should specify false, and manually attach the validation
/// to the form when you are finished. The default is false.</param>
var $element = $(element),
form = $element.parents("form")[0],
valInfo, rules, messages;
if (!form) { // Cannot do client-side validation without a form
return;
}
valInfo = validationInfo(form);
valInfo.options.rules[element.name] = rules = {};
valInfo.options.messages[element.name] = messages = {};
$.each(this.adapters, function () {
var prefix = "data-val-" + this.name,
message = $element.attr(prefix),
paramValues = {};
if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy)
prefix += "-";
$.each(this.params, function () {
paramValues[this] = $element.attr(prefix + this);
});
this.adapt({
element: element,
form: form,
message: message,
params: paramValues,
rules: rules,
messages: messages
});
}
});
$.extend(rules, { "__dummy__": true });
if (!skipAttach) {
valInfo.attachValidation();
}
},
parse: function (selector) {
/// <summary>
/// Parses all the HTML elements in the specified selector. It looks for input elements decorated
/// with the [data-val=true] attribute value and enables validation according to the data-val-*
/// attribute values.
/// </summary>
/// <param name="selector" type="String">Any valid jQuery selector.</param>
// $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one
// element with data-val=true
var $selector = $(selector),
$forms = $selector.parents()
.addBack()
.filter("form")
.add($selector.find("form"))
.has("[data-val=true]");
$selector.find("[data-val=true]").each(function () {
$jQval.unobtrusive.parseElement(this, true);
});
$forms.each(function () {
var info = validationInfo(this);
if (info) {
info.attachValidation();
}
});
}
};
adapters = $jQval.unobtrusive.adapters;
adapters.add = function (adapterName, params, fn) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
/// <param name="params" type="Array" optional="true">[Optional] An array of parameter names (strings) that will
/// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and
/// mmmm is the parameter name).</param>
/// <param name="fn" type="Function">The function to call, which adapts the values from the HTML
/// attributes into jQuery Validate rules and/or messages.</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
if (!fn) { // Called with no params, just a function
fn = params;
params = [];
}
this.push({ name: adapterName, params: params, adapt: fn });
return this;
};
adapters.addBool = function (adapterName, ruleName) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
/// the jQuery Validate validation rule has no parameter values.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
/// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
/// of adapterName will be used instead.</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, function (options) {
setValidationValues(options, ruleName || adapterName, true);
});
};
adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
/// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and
/// one for min-and-max). The HTML parameters are expected to be named -min and -max.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute (where nnnn is the adapter name).</param>
/// <param name="minRuleName" type="String">The name of the jQuery Validate rule to be used when you only
/// have a minimum value.</param>
/// <param name="maxRuleName" type="String">The name of the jQuery Validate rule to be used when you only
/// have a maximum value.</param>
/// <param name="minMaxRuleName" type="String">The name of the jQuery Validate rule to be used when you
/// have both a minimum and maximum value.</param>
/// <param name="minAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
/// contains the minimum value. The default is "min".</param>
/// <param name="maxAttribute" type="String" optional="true">[Optional] The name of the HTML attribute that
/// contains the maximum value. The default is "max".</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) {
var min = options.params.min,
max = options.params.max;
if (min && max) {
setValidationValues(options, minMaxRuleName, [min, max]);
}
else if (min) {
setValidationValues(options, minRuleName, min);
}
else if (max) {
setValidationValues(options, maxRuleName, max);
}
});
};
adapters.addSingleVal = function (adapterName, attribute, ruleName) {
/// <summary>Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where
/// the jQuery Validate validation rule has a single value.</summary>
/// <param name="adapterName" type="String">The name of the adapter to be added. This matches the name used
/// in the data-val-nnnn HTML attribute(where nnnn is the adapter name).</param>
/// <param name="attribute" type="String">[Optional] The name of the HTML attribute that contains the value.
/// The default is "val".</param>
/// <param name="ruleName" type="String" optional="true">[Optional] The name of the jQuery Validate rule. If not provided, the value
/// of adapterName will be used instead.</param>
/// <returns type="jQuery.validator.unobtrusive.adapters" />
return this.add(adapterName, [attribute || "val"], function (options) {
setValidationValues(options, ruleName || adapterName, options.params[attribute]);
});
};
$jQval.addMethod("__dummy__", function (value, element, params) {
return true;
});
$jQval.addMethod("regex", function (value, element, params) {
var match;
if (this.optional(element)) {
return true;
}
match = new RegExp(params).exec(value);
return (match && (match.index === 0) && (match[0].length === value.length));
});
$jQval.addMethod("nonalphamin", function (value, element, nonalphamin) {
var match;
if (nonalphamin) {
match = value.match(/\W/g);
match = match && match.length >= nonalphamin;
}
return match;
});
if ($jQval.methods.extension) {
adapters.addSingleVal("accept", "mimtype");
adapters.addSingleVal("extension", "extension");
} else {
// for backward compatibility, when the 'extension' validation method does not exist, such as with versions
// of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for
// validating the extension, and ignore mime-type validations as they are not supported.
adapters.addSingleVal("extension", "extension", "accept");
}
adapters.addSingleVal("regex", "pattern");
adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");
adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");
adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength");
adapters.add("equalto", ["other"], function (options) {
var prefix = getModelPrefix(options.element.name),
other = options.params.other,
fullOtherName = appendModelPrefix(other, prefix),
element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0];
setValidationValues(options, "equalTo", element);
});
adapters.add("required", function (options) {
// jQuery Validate equates "required" with "mandatory" for checkbox elements
if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") {
setValidationValues(options, "required", true);
}
});
adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
var value = {
url: options.params.url,
type: options.params.type || "GET",
data: {}
},
prefix = getModelPrefix(options.element.name);
$.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
var paramName = appendModelPrefix(fieldName, prefix);
value.data[paramName] = function () {
var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']");
// For checkboxes and radio buttons, only pick up values from checked fields.
if (field.is(":checkbox")) {
return field.filter(":checked").val() || field.filter(":hidden").val() || '';
}
else if (field.is(":radio")) {
return field.filter(":checked").val() || '';
}
return field.val();
};
});
setValidationValues(options, "remote", value);
});
adapters.add("password", ["min", "nonalphamin", "regex"], function (options) {
if (options.params.min) {
setValidationValues(options, "minlength", options.params.min);
}
if (options.params.nonalphamin) {
setValidationValues(options, "nonalphamin", options.params.nonalphamin);
}
if (options.params.regex) {
setValidationValues(options, "regex", options.params.regex);
}
});
adapters.add("fileextensions", ["extensions"], function (options) {
setValidationValues(options, "extension", options.params.extensions);
});
$(function () {
$jQval.unobtrusive.parse(document);
});
return $jQval.unobtrusive;
}));

View File

@ -1,22 +0,0 @@
The MIT License (MIT)
=====================
Copyright Jörn Zaefferer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,36 +0,0 @@
Copyright JS Foundation and other contributors, https://js.foundation/
This software consists of voluntary contributions made by many
individuals. For exact contribution history, see the revision history
available at https://github.com/jquery/jquery
The following license applies to all parts of this software except as
documented below:
====
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
====
All files located in the node_modules and external directories are
externally maintained libraries used by this software which have their
own licenses; we recommend you read them, as their terms may differ from
the terms above.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,72 +0,0 @@
using System;
using System.Threading.Tasks;
namespace SpotifyAPI.Web.Examples.CLI
{
internal static class Program
{
// private static string _clientId = ""; //"";
// private static string _secretId = ""; //"";
// ReSharper disable once UnusedParameter.Local
// public static void Main(string[] args)
// {
// _clientId = string.IsNullOrEmpty(_clientId) ?
// Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_ID") :
// _clientId;
// _secretId = string.IsNullOrEmpty(_secretId) ?
// Environment.GetEnvironmentVariable("SPOTIFY_SECRET_ID") :
// _secretId;
// Console.WriteLine("####### Spotify API Example #######");
// Console.WriteLine("This example uses AuthorizationCodeAuth.");
// Console.WriteLine(
// "Tip: If you want to supply your ClientID and SecretId beforehand, use env variables (SPOTIFY_CLIENT_ID and SPOTIFY_SECRET_ID)");
// var auth =
// new AuthorizationCodeAuth(_clientId, _secretId, "http://localhost:4002", "http://localhost:4002",
// Scope.PlaylistReadPrivate | Scope.PlaylistReadCollaborative);
// auth.AuthReceived += AuthOnAuthReceived;
// auth.Start();
// auth.OpenBrowser();
// Console.ReadLine();
// auth.Stop(0);
// }
// private static async void AuthOnAuthReceived(object sender, AuthorizationCode payload)
// {
// var auth = (AuthorizationCodeAuth)sender;
// auth.Stop();
// Token token = await auth.ExchangeCode(payload.Code);
// var api = new SpotifyWebAPI
// {
// AccessToken = token.AccessToken,
// TokenType = token.TokenType
// };
// await PrintUsefulData(api);
// }
// private static async Task PrintAllPlaylistTracks(SpotifyWebAPI api, Paging<SimplePlaylist> playlists)
// {
// if (playlists.Items == null) return;
// playlists.Items.ForEach(playlist => Console.WriteLine($"- {playlist.Name}"));
// if (playlists.HasNextPage())
// await PrintAllPlaylistTracks(api, await api.GetNextPageAsync(playlists));
// }
// private static async Task PrintUsefulData(SpotifyWebAPI api)
// {
// PrivateProfile profile = await api.GetPrivateProfileAsync();
// string name = string.IsNullOrEmpty(profile.DisplayName) ? profile.Id : profile.DisplayName;
// Console.WriteLine($"Hello there, {name}!");
// Console.WriteLine("Your playlists:");
// await PrintAllPlaylistTracks(api, api.GetUserPlaylists(profile.Id));
// }
}
}

View File

@ -1,12 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\SpotifyAPI.Web.Auth\SpotifyAPI.Web.Auth.csproj" />
</ItemGroup>
</Project>

View File

@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
{ {
public class Actions public class Actions
{ {
public Dictionary<string, bool> Disallows { get; private set; } public Dictionary<string, bool> Disallows { get; set; }
} }
} }

View File

@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
{ {
public class AlbumsResponse public class AlbumsResponse
{ {
public List<FullAlbum> Albums { get; private set; } public List<FullAlbum> Albums { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
{ {
public class CategoriesResponse public class CategoriesResponse
{ {
public Paging<Category> Categories { get; private set; } public Paging<Category> Categories { get; set; }
} }
} }

View File

@ -4,9 +4,9 @@ namespace SpotifyAPI.Web
{ {
public class Category public class Category
{ {
public string Href { get; private set; } public string Href { get; set; }
public List<Image> Icons { get; private set; } public List<Image> Icons { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public string Name { get; private set; } public string Name { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
{ {
public class CategoryPlaylistsResponse public class CategoryPlaylistsResponse
{ {
public Paging<SimplePlaylist> Playlists { get; private set; } public Paging<SimplePlaylist> Playlists { get; set; }
} }
} }

View File

@ -4,9 +4,9 @@ namespace SpotifyAPI.Web
{ {
public class Context public class Context
{ {
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
{ {
public class Copyright public class Copyright
{ {
public string Text { get; private set; } public string Text { get; set; }
public string Type { get; private set; } public string Type { get; set; }
} }
} }

View File

@ -5,13 +5,13 @@ namespace SpotifyAPI.Web
{ {
public class CurrentlyPlaying public class CurrentlyPlaying
{ {
public Context Context { get; private set; } public Context Context { get; set; }
public string CurrentlyPlayingType { get; private set; } public string CurrentlyPlayingType { get; set; }
public bool IsPlaying { get; private set; } public bool IsPlaying { get; set; }
[JsonConverter(typeof(PlayableItemConverter))] [JsonConverter(typeof(PlayableItemConverter))]
public IPlayableItem Item { get; private set; } public IPlayableItem Item { get; set; }
public int? ProgressMs { get; private set; } public int? ProgressMs { get; set; }
public long Timestamp { get; private set; } public long Timestamp { get; set; }
} }
} }

View File

@ -4,18 +4,18 @@ namespace SpotifyAPI.Web
{ {
public class CurrentlyPlayingContext public class CurrentlyPlayingContext
{ {
public Device Device { get; private set; } public Device Device { get; set; }
public string RepeatState { get; private set; } public string RepeatState { get; set; }
public bool ShuffleState { get; private set; } public bool ShuffleState { get; set; }
public Context Context { get; private set; } public Context Context { get; set; }
public long Timestamp { get; private set; } public long Timestamp { get; set; }
public int ProgressMs { get; private set; } public int ProgressMs { get; set; }
public bool IsPlaying { get; private set; } public bool IsPlaying { get; set; }
[JsonConverter(typeof(PlayableItemConverter))] [JsonConverter(typeof(PlayableItemConverter))]
public IPlayableItem Item { get; private set; } public IPlayableItem Item { get; set; }
public string CurrentlyPlayingType { get; private set; } public string CurrentlyPlayingType { get; set; }
public Actions Actions { get; private set; } public Actions Actions { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
{ {
public class Cursor public class Cursor
{ {
public string Before { get; private set; } public string Before { get; set; }
public string After { get; private set; } public string After { get; set; }
} }
} }

View File

@ -4,11 +4,11 @@ namespace SpotifyAPI.Web
{ {
public class CursorPaging<T> public class CursorPaging<T>
{ {
public string Href { get; private set; } public string Href { get; set; }
public List<T> Items { get; private set; } public List<T> Items { get; set; }
public int Limit { get; private set; } public int Limit { get; set; }
public string Next { get; private set; } public string Next { get; set; }
public Cursor Cursors { get; private set; } public Cursor Cursors { get; set; }
public int Total { get; private set; } public int Total { get; set; }
} }
} }

View File

@ -2,12 +2,12 @@ namespace SpotifyAPI.Web
{ {
public class Device public class Device
{ {
public string Id { get; private set; } public string Id { get; set; }
public bool IsActive { get; private set; } public bool IsActive { get; set; }
public bool IsPrivateSession { get; private set; } public bool IsPrivateSession { get; set; }
public bool IsRestricted { get; private set; } public bool IsRestricted { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public int? VolumePercent { get; private set; } public int? VolumePercent { get; set; }
} }
} }

View File

@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
{ {
public class DeviceResponse public class DeviceResponse
{ {
public List<Device> Devices { get; private set; } public List<Device> Devices { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
{ {
public class FeaturedPlaylistsResponse public class FeaturedPlaylistsResponse
{ {
public string Message { get; private set; } public string Message { get; set; }
public Paging<SimplePlaylist> Playlists { get; private set; } public Paging<SimplePlaylist> Playlists { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
{ {
public class FollowedArtistsResponse public class FollowedArtistsResponse
{ {
public CursorPaging<FullArtist> Artists { get; private set; } public CursorPaging<FullArtist> Artists { get; set; }
} }
} }

View File

@ -2,8 +2,8 @@ namespace SpotifyAPI.Web
{ {
public class Followers public class Followers
{ {
public string Href { get; private set; } public string Href { get; set; }
public int Total { get; private set; } public int Total { get; set; }
} }
} }

View File

@ -4,24 +4,24 @@ namespace SpotifyAPI.Web
{ {
public class FullAlbum public class FullAlbum
{ {
public string AlbumType { get; private set; } public string AlbumType { get; set; }
public List<SimpleArtist> Artists { get; private set; } public List<SimpleArtist> Artists { get; set; }
public List<string> AvailableMarkets { get; private set; } public List<string> AvailableMarkets { get; set; }
public List<Copyright> Copyrights { get; private set; } public List<Copyright> Copyrights { get; set; }
public Dictionary<string, string> ExternalIds { get; private set; } public Dictionary<string, string> ExternalIds { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public List<string> Genres { get; private set; } public List<string> Genres { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Label { get; private set; } public string Label { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public int Popularity { get; private set; } public int Popularity { get; set; }
public string ReleaseDate { get; private set; } public string ReleaseDate { get; set; }
public string ReleaseDatePrecision { get; private set; } public string ReleaseDatePrecision { get; set; }
public Dictionary<string, string> Restrictions { get; private set; } public Dictionary<string, string> Restrictions { get; set; }
public Paging<SimpleTrack> Tracks { get; private set; } public Paging<SimpleTrack> Tracks { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -4,15 +4,15 @@ namespace SpotifyAPI.Web
{ {
public class FullArtist public class FullArtist
{ {
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public Followers Followers { get; private set; } public Followers Followers { get; set; }
public List<string> Genres { get; private set; } public List<string> Genres { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public int Popularity { get; private set; } public int Popularity { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -6,25 +6,25 @@ namespace SpotifyAPI.Web
{ {
public class FullEpisode : IPlayableItem public class FullEpisode : IPlayableItem
{ {
public string AudioPreviewUrl { get; private set; } public string AudioPreviewUrl { get; set; }
public string Description { get; private set; } public string Description { get; set; }
public int DurationMs { get; private set; } public int DurationMs { get; set; }
public bool Explicit { get; private set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public bool IsExternallyHosted { get; private set; } public bool IsExternallyHosted { get; set; }
public bool IsPlayable { get; private set; } public bool IsPlayable { get; set; }
public List<string> Languages { get; private set; } public List<string> Languages { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string ReleaseDate { get; private set; } public string ReleaseDate { get; set; }
public string ReleaseDatePrecision { get; private set; } public string ReleaseDatePrecision { get; set; }
public ResumePoint ResumePoint { get; private set; } public ResumePoint ResumePoint { get; set; }
public SimpleShow Show { get; private set; } public SimpleShow Show { get; set; }
[JsonConverter(typeof(StringEnumConverter))] [JsonConverter(typeof(StringEnumConverter))]
public ItemType Type { get; private set; } public ItemType Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -3,17 +3,17 @@ namespace SpotifyAPI.Web
{ {
public class FullPlaylist public class FullPlaylist
{ {
public bool Collaborative { get; private set; } public bool Collaborative { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public PublicUser Owner { get; private set; } public PublicUser Owner { get; set; }
public bool Public { get; private set; } public bool Public { get; set; }
public string SnapshotId { get; private set; } public string SnapshotId { get; set; }
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; private set; } public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -4,21 +4,21 @@ namespace SpotifyAPI.Web
{ {
public class FullShow public class FullShow
{ {
public List<string> AvailableMarkets { get; private set; } public List<string> AvailableMarkets { get; set; }
public List<Copyright> Copyrights { get; private set; } public List<Copyright> Copyrights { get; set; }
public string Description { get; private set; } public string Description { get; set; }
public Paging<SimpleEpisode> Episodes { get; private set; } public Paging<SimpleEpisode> Episodes { get; set; }
public bool Explicit { get; private set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public bool IsExternallyHosted { get; private set; } public bool IsExternallyHosted { get; set; }
public List<string> Languages { get; private set; } public List<string> Languages { get; set; }
public string MediaType { get; private set; } public string MediaType { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string Publisher { get; private set; } public string Publisher { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -6,27 +6,27 @@ namespace SpotifyAPI.Web
{ {
public class FullTrack : IPlayableItem public class FullTrack : IPlayableItem
{ {
public SimpleAlbum Album { get; private set; } public SimpleAlbum Album { get; set; }
public List<SimpleArtist> Artists { get; private set; } public List<SimpleArtist> Artists { get; set; }
public List<string> AvailableMarkets { get; private set; } public List<string> AvailableMarkets { get; set; }
public int DiscNumber { get; private set; } public int DiscNumber { get; set; }
public int DurationMs { get; private set; } public int DurationMs { get; set; }
public bool Explicit { get; private set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalIds { get; private set; } public Dictionary<string, string> ExternalIds { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public bool IsPlayable { get; private set; } public bool IsPlayable { get; set; }
public LinkedTrack LinkedFrom { get; private set; } public LinkedTrack LinkedFrom { get; set; }
public Dictionary<string, string> Restrictions { get; private set; } public Dictionary<string, string> Restrictions { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public int Popularity { get; private set; } public int Popularity { get; set; }
public string PreviewUrl { get; private set; } public string PreviewUrl { get; set; }
public int TrackNumber { get; private set; } public int TrackNumber { get; set; }
[JsonConverter(typeof(StringEnumConverter))] [JsonConverter(typeof(StringEnumConverter))]
public ItemType Type { get; private set; } public ItemType Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
public bool IsLocal { get; private set; } public bool IsLocal { get; set; }
} }
} }

View File

@ -2,8 +2,8 @@ namespace SpotifyAPI.Web
{ {
public class Image public class Image
{ {
public int Height { get; private set; } public int Height { get; set; }
public int Width { get; private set; } public int Width { get; set; }
public string Url { get; private set; } public string Url { get; set; }
} }
} }

View File

@ -3,10 +3,10 @@ namespace SpotifyAPI.Web
{ {
public class LinkedTrack public class LinkedTrack
{ {
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
{ {
public class NewReleasesResponse public class NewReleasesResponse
{ {
public string Message { get; private set; } public string Message { get; set; }
public Paging<SimpleAlbum> Albums { get; private set; } public Paging<SimpleAlbum> Albums { get; set; }
} }
} }

View File

@ -4,23 +4,23 @@ namespace SpotifyAPI.Web
{ {
public class Paging<T> public class Paging<T>
{ {
public string Href { get; private set; } public string Href { get; set; }
public List<T> Items { get; private set; } public List<T> Items { get; set; }
public int Limit { get; private set; } public int Limit { get; set; }
public string Next { get; private set; } public string Next { get; set; }
public int Offset { get; private set; } public int Offset { get; set; }
public string Previous { get; private set; } public string Previous { get; set; }
public int Total { get; private set; } public int Total { get; set; }
} }
public class Paging<T, TNext> public class Paging<T, TNext>
{ {
public string Href { get; private set; } public string Href { get; set; }
public List<T> Items { get; private set; } public List<T> Items { get; set; }
public int Limit { get; private set; } public int Limit { get; set; }
public string Next { get; private set; } public string Next { get; set; }
public int Offset { get; private set; } public int Offset { get; set; }
public string Previous { get; private set; } public string Previous { get; set; }
public int Total { get; private set; } public int Total { get; set; }
} }
} }

View File

@ -3,8 +3,8 @@ namespace SpotifyAPI.Web
{ {
public class PlayHistoryItem public class PlayHistoryItem
{ {
public SimpleTrack Track { get; private set; } public SimpleTrack Track { get; set; }
public DateTime PlayedAt { get; private set; } public DateTime PlayedAt { get; set; }
public Context Context { get; private set; } public Context Context { get; set; }
} }
} }

View File

@ -5,11 +5,11 @@ namespace SpotifyAPI.Web
{ {
public class PlaylistTrack<T> public class PlaylistTrack<T>
{ {
public DateTime? AddedAt { get; private set; } public DateTime? AddedAt { get; set; }
public PublicUser AddedBy { get; private set; } public PublicUser AddedBy { get; set; }
public bool IsLocal { get; private set; } public bool IsLocal { get; set; }
[JsonConverter(typeof(PlayableItemConverter))] [JsonConverter(typeof(PlayableItemConverter))]
public T Track { get; private set; } public T Track { get; set; }
} }
} }

View File

@ -5,16 +5,16 @@ namespace SpotifyAPI.Web.Models
{ {
public class PrivateUser public class PrivateUser
{ {
public string Country { get; private set; } public string Country { get; set; }
public string DisplayName { get; private set; } public string DisplayName { get; set; }
public string Email { get; private set; } public string Email { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public Followers Followers { get; private set; } public Followers Followers { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Product { get; private set; } public string Product { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -5,13 +5,13 @@ namespace SpotifyAPI.Web
{ {
public class PublicUser public class PublicUser
{ {
public string DisplayName { get; private set; } public string DisplayName { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public Followers Followers { get; private set; } public Followers Followers { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
{ {
public class RecommendationGenresResponse public class RecommendationGenresResponse
{ {
public List<string> Genres { get; private set; } public List<string> Genres { get; set; }
} }
} }

View File

@ -5,14 +5,14 @@ namespace SpotifyAPI.Web
public class RecommendationSeed public class RecommendationSeed
{ {
[JsonProperty("afterFilteringSize")] [JsonProperty("afterFilteringSize")]
public int AfterFiliteringSize { get; private set; } public int AfterFiliteringSize { get; set; }
[JsonProperty("afterRelinkingSize")] [JsonProperty("afterRelinkingSize")]
public int AfterRelinkingSize { get; private set; } public int AfterRelinkingSize { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
[JsonProperty("initialPoolSize")] [JsonProperty("initialPoolSize")]
public int InitialPoolSize { get; private set; } public int InitialPoolSize { get; set; }
public string Type { get; private set; } public string Type { get; set; }
} }
} }

View File

@ -4,7 +4,7 @@ namespace SpotifyAPI.Web
{ {
public class RecommendationsResponse public class RecommendationsResponse
{ {
public List<RecommendationSeed> Seeds { get; private set; } public List<RecommendationSeed> Seeds { get; set; }
public List<SimpleTrack> Tracks { get; private set; } public List<SimpleTrack> Tracks { get; set; }
} }
} }

View File

@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
{ {
public class ResumePoint public class ResumePoint
{ {
public bool FullyPlayed { get; private set; } public bool FullyPlayed { get; set; }
public int ResumePositionMs { get; private set; } public int ResumePositionMs { get; set; }
} }
} }

View File

@ -2,10 +2,10 @@ namespace SpotifyAPI.Web
{ {
public class SearchResponse public class SearchResponse
{ {
public Paging<FullArtist, SearchResponse> Artists { get; private set; } public Paging<FullArtist, SearchResponse> Artists { get; set; }
public Paging<SimpleAlbum, SearchResponse> Albums { get; private set; } public Paging<SimpleAlbum, SearchResponse> Albums { get; set; }
public Paging<FullTrack, SearchResponse> Tracks { get; private set; } public Paging<FullTrack, SearchResponse> Tracks { get; set; }
public Paging<SimpleShow, SearchResponse> Shows { get; private set; } public Paging<SimpleShow, SearchResponse> Shows { get; set; }
public Paging<SimpleEpisode, SearchResponse> Episodes { get; private set; } public Paging<SimpleEpisode, SearchResponse> Episodes { get; set; }
} }
} }

View File

@ -2,17 +2,17 @@ namespace SpotifyAPI.Web
{ {
public class Section public class Section
{ {
public float Start { get; private set; } public float Start { get; set; }
public float Duration { get; private set; } public float Duration { get; set; }
public float Confidence { get; private set; } public float Confidence { get; set; }
public float Loudness { get; private set; } public float Loudness { get; set; }
public float Tempo { get; private set; } public float Tempo { get; set; }
public float TempoConfidence { get; private set; } public float TempoConfidence { get; set; }
public int Key { get; private set; } public int Key { get; set; }
public float KeyConfidence { get; private set; } public float KeyConfidence { get; set; }
public int Mode { get; private set; } public int Mode { get; set; }
public float ModeConfidence { get; private set; } public float ModeConfidence { get; set; }
public int TimeSignature { get; private set; } public int TimeSignature { get; set; }
public float TimeSignatureConfidence { get; private set; } public float TimeSignatureConfidence { get; set; }
} }
} }

View File

@ -4,14 +4,14 @@ namespace SpotifyAPI.Web
{ {
public class Segment public class Segment
{ {
public float Start { get; private set; } public float Start { get; set; }
public float Duration { get; private set; } public float Duration { get; set; }
public float Confidence { get; private set; } public float Confidence { get; set; }
public float LoudnessStart { get; private set; } public float LoudnessStart { get; set; }
public float LoudnessMax { get; private set; } public float LoudnessMax { get; set; }
public float LoudnessMaxTime { get; private set; } public float LoudnessMaxTime { get; set; }
public float LoudnessEnd { get; private set; } public float LoudnessEnd { get; set; }
public List<float> Pitches { get; private set; } public List<float> Pitches { get; set; }
public List<float> Timbre { get; private set; } public List<float> Timbre { get; set; }
} }
} }

View File

@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
{ {
public class ShowsResponse public class ShowsResponse
{ {
public List<SimpleShow> Shows { get; private set; } public List<SimpleShow> Shows { get; set; }
} }
} }

View File

@ -4,19 +4,19 @@ namespace SpotifyAPI.Web
{ {
public class SimpleAlbum public class SimpleAlbum
{ {
public string AlbumGroup { get; private set; } public string AlbumGroup { get; set; }
public string AlbumType { get; private set; } public string AlbumType { get; set; }
public List<SimpleArtist> Artists { get; private set; } public List<SimpleArtist> Artists { get; set; }
public List<string> AvailableMarkets { get; private set; } public List<string> AvailableMarkets { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string ReleaseDate { get; private set; } public string ReleaseDate { get; set; }
public string ReleaseDatePrecision { get; private set; } public string ReleaseDatePrecision { get; set; }
public Dictionary<string, string> Restrictions { get; private set; } public Dictionary<string, string> Restrictions { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -3,11 +3,11 @@ namespace SpotifyAPI.Web
{ {
public class SimpleArtist public class SimpleArtist
{ {
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -7,27 +7,27 @@ namespace SpotifyAPI.Web
{ {
public class SimpleEpisode public class SimpleEpisode
{ {
public string AudioPreviewUrl { get; private set; } public string AudioPreviewUrl { get; set; }
public string Description { get; private set; } public string Description { get; set; }
public int DurationMs { get; private set; } public int DurationMs { get; set; }
public bool Explicit { get; private set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public bool IsExternallyHosted { get; private set; } public bool IsExternallyHosted { get; set; }
public bool IsPlayable { get; private set; } public bool IsPlayable { get; set; }
[Obsolete("This field is deprecated and might be removed in the future. Please use the languages field instead")] [Obsolete("This field is deprecated and might be removed in the future. Please use the languages field instead")]
public string Language { get; private set; } public string Language { get; set; }
public List<string> Languages { get; private set; } public List<string> Languages { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string ReleaseDate { get; private set; } public string ReleaseDate { get; set; }
public string ReleaseDatePrecision { get; private set; } public string ReleaseDatePrecision { get; set; }
public ResumePoint ResumePoint { get; private set; } public ResumePoint ResumePoint { get; set; }
[JsonConverter(typeof(StringEnumConverter))] [JsonConverter(typeof(StringEnumConverter))]
public ItemType Type { get; private set; } public ItemType Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -6,18 +6,18 @@ namespace SpotifyAPI.Web
/// </summary> /// </summary>
public class SimplePlaylist public class SimplePlaylist
{ {
public bool Collaborative { get; private set; } public bool Collaborative { get; set; }
public string Description { get; private set; } public string Description { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public PublicUser Owner { get; private set; } public PublicUser Owner { get; set; }
public bool? Public { get; private set; } public bool? Public { get; set; }
public string SnapshotId { get; private set; } public string SnapshotId { get; set; }
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; private set; } public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -4,20 +4,20 @@ namespace SpotifyAPI.Web
{ {
public class SimpleShow public class SimpleShow
{ {
public List<string> AvailableMarkets { get; private set; } public List<string> AvailableMarkets { get; set; }
public List<Copyright> Copyrights { get; private set; } public List<Copyright> Copyrights { get; set; }
public string Description { get; private set; } public string Description { get; set; }
public bool Explicit { get; private set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public List<Image> Images { get; private set; } public List<Image> Images { get; set; }
public bool IsExternallyHosted { get; private set; } public bool IsExternallyHosted { get; set; }
public List<string> Languages { get; private set; } public List<string> Languages { get; set; }
public string MediaType { get; private set; } public string MediaType { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string Publisher { get; private set; } public string Publisher { get; set; }
public string Type { get; private set; } public string Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -6,22 +6,22 @@ namespace SpotifyAPI.Web
{ {
public class SimpleTrack public class SimpleTrack
{ {
public List<SimpleArtist> Artists { get; private set; } public List<SimpleArtist> Artists { get; set; }
public List<string> AvailableMarkets { get; private set; } public List<string> AvailableMarkets { get; set; }
public int DiscNumber { get; private set; } public int DiscNumber { get; set; }
public int DurationMs { get; private set; } public int DurationMs { get; set; }
public bool Explicit { get; private set; } public bool Explicit { get; set; }
public Dictionary<string, string> ExternalUrls { get; private set; } public Dictionary<string, string> ExternalUrls { get; set; }
public string Href { get; private set; } public string Href { get; set; }
public string Id { get; private set; } public string Id { get; set; }
public bool IsPlayable { get; private set; } public bool IsPlayable { get; set; }
public LinkedTrack LinkedFrom { get; private set; } public LinkedTrack LinkedFrom { get; set; }
public string Name { get; private set; } public string Name { get; set; }
public string PreviewUrl { get; private set; } public string PreviewUrl { get; set; }
public int TrackNumber { get; private set; } public int TrackNumber { get; set; }
[JsonConverter(typeof(StringEnumConverter))] [JsonConverter(typeof(StringEnumConverter))]
public ItemType Type { get; private set; } public ItemType Type { get; set; }
public string Uri { get; private set; } public string Uri { get; set; }
} }
} }

View File

@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
{ {
public class SnapshotResponse public class SnapshotResponse
{ {
public string SnapshotId { get; private set; } public string SnapshotId { get; set; }
} }
} }

Some files were not shown because too many files have changed in this diff Show More