mirror of
https://github.com/Sarsoo/Spotify.NET.git
synced 2024-12-23 14:46:26 +00:00
Made responses have public setters - needed for testing - removed old projects
This commit is contained in:
parent
a82f95f0d0
commit
bf4c817e70
@ -13,11 +13,11 @@ indent_size = 2
|
||||
indent_size = 2
|
||||
|
||||
[*.{cs,vb}]
|
||||
# Does not seem to work...
|
||||
dotnet_diagnostic.CA1303.severity = none
|
||||
dotnet_diagnostic.CA1056.severity = none
|
||||
dotnet_diagnostic.CA1034.severity = none
|
||||
dotnet_diagnostic.CA1054.severity = none
|
||||
dotnet_diagnostic.CA2227.severity = none
|
||||
# Sort using and Import directives with System.* appearing first
|
||||
dotnet_sort_system_directives_first = true
|
||||
dotnet_style_require_accessibility_modifiers = always:warning
|
||||
|
@ -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 });
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
using System;
|
||||
using SpotifyAPI.Web.Models;
|
||||
|
||||
namespace SpotifyAPI.Web.Examples.ASP.Models
|
||||
{
|
||||
public class IndexModel
|
||||
{
|
||||
public Paging<object> SavedTracks;
|
||||
}
|
||||
}
|
@ -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>();
|
||||
});
|
||||
}
|
||||
}
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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.
|
@ -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>
|
@ -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?}");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -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>
|
@ -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>
|
@ -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">
|
||||
© 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>
|
@ -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>
|
@ -1,3 +0,0 @@
|
||||
@using SpotifyAPI.Web.Examples.ASP
|
||||
@using SpotifyAPI.Web.Examples.ASP.Models
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
@ -1,3 +0,0 @@
|
||||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"System": "Information",
|
||||
"Microsoft": "Information"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
@ -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 |
@ -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.
|
@ -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 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
@ -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
@ -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 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 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
@ -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.
|
@ -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;
|
||||
}));
|
File diff suppressed because one or more lines are too long
@ -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 it is too large
Load Diff
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
@ -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
@ -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));
|
||||
// }
|
||||
}
|
||||
}
|
@ -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>
|
@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Actions
|
||||
{
|
||||
public Dictionary<string, bool> Disallows { get; private set; }
|
||||
public Dictionary<string, bool> Disallows { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class AlbumsResponse
|
||||
{
|
||||
public List<FullAlbum> Albums { get; private set; }
|
||||
public List<FullAlbum> Albums { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class CategoriesResponse
|
||||
{
|
||||
public Paging<Category> Categories { get; private set; }
|
||||
public Paging<Category> Categories { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,9 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Category
|
||||
{
|
||||
public string Href { get; private set; }
|
||||
public List<Image> Icons { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string Href { get; set; }
|
||||
public List<Image> Icons { get; set; }
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class CategoryPlaylistsResponse
|
||||
{
|
||||
public Paging<SimplePlaylist> Playlists { get; private set; }
|
||||
public Paging<SimplePlaylist> Playlists { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,9 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Context
|
||||
{
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Copyright
|
||||
{
|
||||
public string Text { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Text { get; set; }
|
||||
public string Type { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -5,13 +5,13 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class CurrentlyPlaying
|
||||
{
|
||||
public Context Context { get; private set; }
|
||||
public string CurrentlyPlayingType { get; private set; }
|
||||
public bool IsPlaying { get; private set; }
|
||||
public Context Context { get; set; }
|
||||
public string CurrentlyPlayingType { get; set; }
|
||||
public bool IsPlaying { get; set; }
|
||||
|
||||
[JsonConverter(typeof(PlayableItemConverter))]
|
||||
public IPlayableItem Item { get; private set; }
|
||||
public int? ProgressMs { get; private set; }
|
||||
public long Timestamp { get; private set; }
|
||||
public IPlayableItem Item { get; set; }
|
||||
public int? ProgressMs { get; set; }
|
||||
public long Timestamp { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,18 +4,18 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class CurrentlyPlayingContext
|
||||
{
|
||||
public Device Device { get; private set; }
|
||||
public string RepeatState { get; private set; }
|
||||
public bool ShuffleState { get; private set; }
|
||||
public Context Context { get; private set; }
|
||||
public long Timestamp { get; private set; }
|
||||
public int ProgressMs { get; private set; }
|
||||
public bool IsPlaying { get; private set; }
|
||||
public Device Device { get; set; }
|
||||
public string RepeatState { get; set; }
|
||||
public bool ShuffleState { get; set; }
|
||||
public Context Context { get; set; }
|
||||
public long Timestamp { get; set; }
|
||||
public int ProgressMs { get; set; }
|
||||
public bool IsPlaying { get; set; }
|
||||
|
||||
[JsonConverter(typeof(PlayableItemConverter))]
|
||||
public IPlayableItem Item { get; private set; }
|
||||
public IPlayableItem Item { get; set; }
|
||||
|
||||
public string CurrentlyPlayingType { get; private set; }
|
||||
public Actions Actions { get; private set; }
|
||||
public string CurrentlyPlayingType { get; set; }
|
||||
public Actions Actions { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Cursor
|
||||
{
|
||||
public string Before { get; private set; }
|
||||
public string After { get; private set; }
|
||||
public string Before { get; set; }
|
||||
public string After { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,11 +4,11 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class CursorPaging<T>
|
||||
{
|
||||
public string Href { get; private set; }
|
||||
public List<T> Items { get; private set; }
|
||||
public int Limit { get; private set; }
|
||||
public string Next { get; private set; }
|
||||
public Cursor Cursors { get; private set; }
|
||||
public int Total { get; private set; }
|
||||
public string Href { get; set; }
|
||||
public List<T> Items { get; set; }
|
||||
public int Limit { get; set; }
|
||||
public string Next { get; set; }
|
||||
public Cursor Cursors { get; set; }
|
||||
public int Total { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,12 +2,12 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Device
|
||||
{
|
||||
public string Id { get; private set; }
|
||||
public bool IsActive { get; private set; }
|
||||
public bool IsPrivateSession { get; private set; }
|
||||
public bool IsRestricted { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public int? VolumePercent { get; private set; }
|
||||
public string Id { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
public bool IsPrivateSession { get; set; }
|
||||
public bool IsRestricted { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Type { get; set; }
|
||||
public int? VolumePercent { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class DeviceResponse
|
||||
{
|
||||
public List<Device> Devices { get; private set; }
|
||||
public List<Device> Devices { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FeaturedPlaylistsResponse
|
||||
{
|
||||
public string Message { get; private set; }
|
||||
public Paging<SimplePlaylist> Playlists { get; private set; }
|
||||
public string Message { get; set; }
|
||||
public Paging<SimplePlaylist> Playlists { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FollowedArtistsResponse
|
||||
{
|
||||
public CursorPaging<FullArtist> Artists { get; private set; }
|
||||
public CursorPaging<FullArtist> Artists { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
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; }
|
||||
}
|
||||
}
|
||||
|
@ -4,24 +4,24 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FullAlbum
|
||||
{
|
||||
public string AlbumType { get; private set; }
|
||||
public List<SimpleArtist> Artists { get; private set; }
|
||||
public List<string> AvailableMarkets { get; private set; }
|
||||
public List<Copyright> Copyrights { get; private set; }
|
||||
public Dictionary<string, string> ExternalIds { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public List<string> Genres { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Label { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public int Popularity { get; private set; }
|
||||
public string ReleaseDate { get; private set; }
|
||||
public string ReleaseDatePrecision { get; private set; }
|
||||
public Dictionary<string, string> Restrictions { get; private set; }
|
||||
public Paging<SimpleTrack> Tracks { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public string AlbumType { get; set; }
|
||||
public List<SimpleArtist> Artists { get; set; }
|
||||
public List<string> AvailableMarkets { get; set; }
|
||||
public List<Copyright> Copyrights { get; set; }
|
||||
public Dictionary<string, string> ExternalIds { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public List<string> Genres { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Label { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int Popularity { get; set; }
|
||||
public string ReleaseDate { get; set; }
|
||||
public string ReleaseDatePrecision { get; set; }
|
||||
public Dictionary<string, string> Restrictions { get; set; }
|
||||
public Paging<SimpleTrack> Tracks { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,15 +4,15 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FullArtist
|
||||
{
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public Followers Followers { get; private set; }
|
||||
public List<string> Genres { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public int Popularity { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public Followers Followers { get; set; }
|
||||
public List<string> Genres { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int Popularity { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -6,25 +6,25 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FullEpisode : IPlayableItem
|
||||
{
|
||||
public string AudioPreviewUrl { get; private set; }
|
||||
public string Description { get; private set; }
|
||||
public int DurationMs { get; private set; }
|
||||
public bool Explicit { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public bool IsExternallyHosted { get; private set; }
|
||||
public bool IsPlayable { get; private set; }
|
||||
public List<string> Languages { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string ReleaseDate { get; private set; }
|
||||
public string ReleaseDatePrecision { get; private set; }
|
||||
public ResumePoint ResumePoint { get; private set; }
|
||||
public SimpleShow Show { get; private set; }
|
||||
public string AudioPreviewUrl { get; set; }
|
||||
public string Description { get; set; }
|
||||
public int DurationMs { get; set; }
|
||||
public bool Explicit { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public bool IsExternallyHosted { get; set; }
|
||||
public bool IsPlayable { get; set; }
|
||||
public List<string> Languages { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string ReleaseDate { get; set; }
|
||||
public string ReleaseDatePrecision { get; set; }
|
||||
public ResumePoint ResumePoint { get; set; }
|
||||
public SimpleShow Show { get; set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ItemType Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public ItemType Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -3,17 +3,17 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FullPlaylist
|
||||
{
|
||||
public bool Collaborative { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public PublicUser Owner { get; private set; }
|
||||
public bool Public { get; private set; }
|
||||
public string SnapshotId { get; private set; }
|
||||
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public bool Collaborative { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Name { get; set; }
|
||||
public PublicUser Owner { get; set; }
|
||||
public bool Public { get; set; }
|
||||
public string SnapshotId { get; set; }
|
||||
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,21 +4,21 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FullShow
|
||||
{
|
||||
public List<string> AvailableMarkets { get; private set; }
|
||||
public List<Copyright> Copyrights { get; private set; }
|
||||
public string Description { get; private set; }
|
||||
public Paging<SimpleEpisode> Episodes { get; private set; }
|
||||
public bool Explicit { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public bool IsExternallyHosted { get; private set; }
|
||||
public List<string> Languages { get; private set; }
|
||||
public string MediaType { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string Publisher { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public List<string> AvailableMarkets { get; set; }
|
||||
public List<Copyright> Copyrights { get; set; }
|
||||
public string Description { get; set; }
|
||||
public Paging<SimpleEpisode> Episodes { get; set; }
|
||||
public bool Explicit { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public bool IsExternallyHosted { get; set; }
|
||||
public List<string> Languages { get; set; }
|
||||
public string MediaType { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Publisher { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -6,27 +6,27 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class FullTrack : IPlayableItem
|
||||
{
|
||||
public SimpleAlbum Album { get; private set; }
|
||||
public List<SimpleArtist> Artists { get; private set; }
|
||||
public List<string> AvailableMarkets { get; private set; }
|
||||
public int DiscNumber { get; private set; }
|
||||
public int DurationMs { get; private set; }
|
||||
public bool Explicit { get; private set; }
|
||||
public Dictionary<string, string> ExternalIds { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public bool IsPlayable { get; private set; }
|
||||
public LinkedTrack LinkedFrom { get; private set; }
|
||||
public Dictionary<string, string> Restrictions { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public int Popularity { get; private set; }
|
||||
public string PreviewUrl { get; private set; }
|
||||
public int TrackNumber { get; private set; }
|
||||
public SimpleAlbum Album { get; set; }
|
||||
public List<SimpleArtist> Artists { get; set; }
|
||||
public List<string> AvailableMarkets { get; set; }
|
||||
public int DiscNumber { get; set; }
|
||||
public int DurationMs { get; set; }
|
||||
public bool Explicit { get; set; }
|
||||
public Dictionary<string, string> ExternalIds { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public bool IsPlayable { get; set; }
|
||||
public LinkedTrack LinkedFrom { get; set; }
|
||||
public Dictionary<string, string> Restrictions { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int Popularity { get; set; }
|
||||
public string PreviewUrl { get; set; }
|
||||
public int TrackNumber { get; set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ItemType Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public bool IsLocal { get; private set; }
|
||||
public ItemType Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
public bool IsLocal { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,8 +2,8 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Image
|
||||
{
|
||||
public int Height { get; private set; }
|
||||
public int Width { get; private set; }
|
||||
public string Url { get; private set; }
|
||||
public int Height { get; set; }
|
||||
public int Width { get; set; }
|
||||
public string Url { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -3,10 +3,10 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class LinkedTrack
|
||||
{
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class NewReleasesResponse
|
||||
{
|
||||
public string Message { get; private set; }
|
||||
public Paging<SimpleAlbum> Albums { get; private set; }
|
||||
public string Message { get; set; }
|
||||
public Paging<SimpleAlbum> Albums { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,23 +4,23 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Paging<T>
|
||||
{
|
||||
public string Href { get; private set; }
|
||||
public List<T> Items { get; private set; }
|
||||
public int Limit { get; private set; }
|
||||
public string Next { get; private set; }
|
||||
public int Offset { get; private set; }
|
||||
public string Previous { get; private set; }
|
||||
public int Total { get; private set; }
|
||||
public string Href { get; set; }
|
||||
public List<T> Items { get; set; }
|
||||
public int Limit { get; set; }
|
||||
public string Next { get; set; }
|
||||
public int Offset { get; set; }
|
||||
public string Previous { get; set; }
|
||||
public int Total { get; set; }
|
||||
}
|
||||
|
||||
public class Paging<T, TNext>
|
||||
{
|
||||
public string Href { get; private set; }
|
||||
public List<T> Items { get; private set; }
|
||||
public int Limit { get; private set; }
|
||||
public string Next { get; private set; }
|
||||
public int Offset { get; private set; }
|
||||
public string Previous { get; private set; }
|
||||
public int Total { get; private set; }
|
||||
public string Href { get; set; }
|
||||
public List<T> Items { get; set; }
|
||||
public int Limit { get; set; }
|
||||
public string Next { get; set; }
|
||||
public int Offset { get; set; }
|
||||
public string Previous { get; set; }
|
||||
public int Total { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class PlayHistoryItem
|
||||
{
|
||||
public SimpleTrack Track { get; private set; }
|
||||
public DateTime PlayedAt { get; private set; }
|
||||
public Context Context { get; private set; }
|
||||
public SimpleTrack Track { get; set; }
|
||||
public DateTime PlayedAt { get; set; }
|
||||
public Context Context { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -5,11 +5,11 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class PlaylistTrack<T>
|
||||
{
|
||||
public DateTime? AddedAt { get; private set; }
|
||||
public PublicUser AddedBy { get; private set; }
|
||||
public bool IsLocal { get; private set; }
|
||||
public DateTime? AddedAt { get; set; }
|
||||
public PublicUser AddedBy { get; set; }
|
||||
public bool IsLocal { get; set; }
|
||||
|
||||
[JsonConverter(typeof(PlayableItemConverter))]
|
||||
public T Track { get; private set; }
|
||||
public T Track { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -5,16 +5,16 @@ namespace SpotifyAPI.Web.Models
|
||||
{
|
||||
public class PrivateUser
|
||||
{
|
||||
public string Country { get; private set; }
|
||||
public string DisplayName { get; private set; }
|
||||
public string Email { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public Followers Followers { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Product { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public string Country { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public string Email { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public Followers Followers { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Product { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -5,13 +5,13 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class PublicUser
|
||||
{
|
||||
public string DisplayName { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public Followers Followers { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public string DisplayName { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public Followers Followers { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class RecommendationGenresResponse
|
||||
{
|
||||
public List<string> Genres { get; private set; }
|
||||
public List<string> Genres { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -5,14 +5,14 @@ namespace SpotifyAPI.Web
|
||||
public class RecommendationSeed
|
||||
{
|
||||
[JsonProperty("afterFilteringSize")]
|
||||
public int AfterFiliteringSize { get; private set; }
|
||||
public int AfterFiliteringSize { get; set; }
|
||||
|
||||
[JsonProperty("afterRelinkingSize")]
|
||||
public int AfterRelinkingSize { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public int AfterRelinkingSize { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
[JsonProperty("initialPoolSize")]
|
||||
public int InitialPoolSize { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public int InitialPoolSize { get; set; }
|
||||
public string Type { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class RecommendationsResponse
|
||||
{
|
||||
public List<RecommendationSeed> Seeds { get; private set; }
|
||||
public List<SimpleTrack> Tracks { get; private set; }
|
||||
public List<RecommendationSeed> Seeds { get; set; }
|
||||
public List<SimpleTrack> Tracks { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class ResumePoint
|
||||
{
|
||||
public bool FullyPlayed { get; private set; }
|
||||
public int ResumePositionMs { get; private set; }
|
||||
public bool FullyPlayed { get; set; }
|
||||
public int ResumePositionMs { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,10 +2,10 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class SearchResponse
|
||||
{
|
||||
public Paging<FullArtist, SearchResponse> Artists { get; private set; }
|
||||
public Paging<SimpleAlbum, SearchResponse> Albums { get; private set; }
|
||||
public Paging<FullTrack, SearchResponse> Tracks { get; private set; }
|
||||
public Paging<SimpleShow, SearchResponse> Shows { get; private set; }
|
||||
public Paging<SimpleEpisode, SearchResponse> Episodes { get; private set; }
|
||||
public Paging<FullArtist, SearchResponse> Artists { get; set; }
|
||||
public Paging<SimpleAlbum, SearchResponse> Albums { get; set; }
|
||||
public Paging<FullTrack, SearchResponse> Tracks { get; set; }
|
||||
public Paging<SimpleShow, SearchResponse> Shows { get; set; }
|
||||
public Paging<SimpleEpisode, SearchResponse> Episodes { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,17 +2,17 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Section
|
||||
{
|
||||
public float Start { get; private set; }
|
||||
public float Duration { get; private set; }
|
||||
public float Confidence { get; private set; }
|
||||
public float Loudness { get; private set; }
|
||||
public float Tempo { get; private set; }
|
||||
public float TempoConfidence { get; private set; }
|
||||
public int Key { get; private set; }
|
||||
public float KeyConfidence { get; private set; }
|
||||
public int Mode { get; private set; }
|
||||
public float ModeConfidence { get; private set; }
|
||||
public int TimeSignature { get; private set; }
|
||||
public float TimeSignatureConfidence { get; private set; }
|
||||
public float Start { get; set; }
|
||||
public float Duration { get; set; }
|
||||
public float Confidence { get; set; }
|
||||
public float Loudness { get; set; }
|
||||
public float Tempo { get; set; }
|
||||
public float TempoConfidence { get; set; }
|
||||
public int Key { get; set; }
|
||||
public float KeyConfidence { get; set; }
|
||||
public int Mode { get; set; }
|
||||
public float ModeConfidence { get; set; }
|
||||
public int TimeSignature { get; set; }
|
||||
public float TimeSignatureConfidence { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,14 +4,14 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class Segment
|
||||
{
|
||||
public float Start { get; private set; }
|
||||
public float Duration { get; private set; }
|
||||
public float Confidence { get; private set; }
|
||||
public float LoudnessStart { get; private set; }
|
||||
public float LoudnessMax { get; private set; }
|
||||
public float LoudnessMaxTime { get; private set; }
|
||||
public float LoudnessEnd { get; private set; }
|
||||
public List<float> Pitches { get; private set; }
|
||||
public List<float> Timbre { get; private set; }
|
||||
public float Start { get; set; }
|
||||
public float Duration { get; set; }
|
||||
public float Confidence { get; set; }
|
||||
public float LoudnessStart { get; set; }
|
||||
public float LoudnessMax { get; set; }
|
||||
public float LoudnessMaxTime { get; set; }
|
||||
public float LoudnessEnd { get; set; }
|
||||
public List<float> Pitches { get; set; }
|
||||
public List<float> Timbre { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class ShowsResponse
|
||||
{
|
||||
public List<SimpleShow> Shows { get; private set; }
|
||||
public List<SimpleShow> Shows { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,19 +4,19 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class SimpleAlbum
|
||||
{
|
||||
public string AlbumGroup { get; private set; }
|
||||
public string AlbumType { get; private set; }
|
||||
public List<SimpleArtist> Artists { get; private set; }
|
||||
public List<string> AvailableMarkets { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string ReleaseDate { get; private set; }
|
||||
public string ReleaseDatePrecision { get; private set; }
|
||||
public Dictionary<string, string> Restrictions { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public string AlbumGroup { get; set; }
|
||||
public string AlbumType { get; set; }
|
||||
public List<SimpleArtist> Artists { get; set; }
|
||||
public List<string> AvailableMarkets { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string ReleaseDate { get; set; }
|
||||
public string ReleaseDatePrecision { get; set; }
|
||||
public Dictionary<string, string> Restrictions { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -3,11 +3,11 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class SimpleArtist
|
||||
{
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -7,27 +7,27 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class SimpleEpisode
|
||||
{
|
||||
public string AudioPreviewUrl { get; private set; }
|
||||
public string Description { get; private set; }
|
||||
public int DurationMs { get; private set; }
|
||||
public bool Explicit { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public bool IsExternallyHosted { get; private set; }
|
||||
public bool IsPlayable { get; private set; }
|
||||
public string AudioPreviewUrl { get; set; }
|
||||
public string Description { get; set; }
|
||||
public int DurationMs { get; set; }
|
||||
public bool Explicit { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public bool IsExternallyHosted { get; set; }
|
||||
public bool IsPlayable { get; set; }
|
||||
|
||||
[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 List<string> Languages { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string ReleaseDate { get; private set; }
|
||||
public string ReleaseDatePrecision { get; private set; }
|
||||
public ResumePoint ResumePoint { get; private set; }
|
||||
public string Language { get; set; }
|
||||
public List<string> Languages { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string ReleaseDate { get; set; }
|
||||
public string ReleaseDatePrecision { get; set; }
|
||||
public ResumePoint ResumePoint { get; set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ItemType Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public ItemType Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -6,18 +6,18 @@ namespace SpotifyAPI.Web
|
||||
/// </summary>
|
||||
public class SimplePlaylist
|
||||
{
|
||||
public bool Collaborative { get; private set; }
|
||||
public string Description { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public PublicUser Owner { get; private set; }
|
||||
public bool? Public { get; private set; }
|
||||
public string SnapshotId { get; private set; }
|
||||
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public bool Collaborative { get; set; }
|
||||
public string Description { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public string Name { get; set; }
|
||||
public PublicUser Owner { get; set; }
|
||||
public bool? Public { get; set; }
|
||||
public string SnapshotId { get; set; }
|
||||
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,20 +4,20 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class SimpleShow
|
||||
{
|
||||
public List<string> AvailableMarkets { get; private set; }
|
||||
public List<Copyright> Copyrights { get; private set; }
|
||||
public string Description { get; private set; }
|
||||
public bool Explicit { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public List<Image> Images { get; private set; }
|
||||
public bool IsExternallyHosted { get; private set; }
|
||||
public List<string> Languages { get; private set; }
|
||||
public string MediaType { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string Publisher { get; private set; }
|
||||
public string Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public List<string> AvailableMarkets { get; set; }
|
||||
public List<Copyright> Copyrights { get; set; }
|
||||
public string Description { get; set; }
|
||||
public bool Explicit { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public List<Image> Images { get; set; }
|
||||
public bool IsExternallyHosted { get; set; }
|
||||
public List<string> Languages { get; set; }
|
||||
public string MediaType { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Publisher { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -6,22 +6,22 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class SimpleTrack
|
||||
{
|
||||
public List<SimpleArtist> Artists { get; private set; }
|
||||
public List<string> AvailableMarkets { get; private set; }
|
||||
public int DiscNumber { get; private set; }
|
||||
public int DurationMs { get; private set; }
|
||||
public bool Explicit { get; private set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; private set; }
|
||||
public string Href { get; private set; }
|
||||
public string Id { get; private set; }
|
||||
public bool IsPlayable { get; private set; }
|
||||
public LinkedTrack LinkedFrom { get; private set; }
|
||||
public string Name { get; private set; }
|
||||
public string PreviewUrl { get; private set; }
|
||||
public int TrackNumber { get; private set; }
|
||||
public List<SimpleArtist> Artists { get; set; }
|
||||
public List<string> AvailableMarkets { get; set; }
|
||||
public int DiscNumber { get; set; }
|
||||
public int DurationMs { get; set; }
|
||||
public bool Explicit { get; set; }
|
||||
public Dictionary<string, string> ExternalUrls { get; set; }
|
||||
public string Href { get; set; }
|
||||
public string Id { get; set; }
|
||||
public bool IsPlayable { get; set; }
|
||||
public LinkedTrack LinkedFrom { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string PreviewUrl { get; set; }
|
||||
public int TrackNumber { get; set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public ItemType Type { get; private set; }
|
||||
public string Uri { get; private set; }
|
||||
public ItemType Type { get; set; }
|
||||
public string Uri { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,6 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
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
Loading…
Reference in New Issue
Block a user