Remove unused resources, add license file to libplaza, update general structure of license file, update readme, add building/releasing/signing details, make Nightwave.NET for Workgroups support 32-bit and 64-bit properly.

This commit is contained in:
Maff 2019-11-07 15:40:25 +00:00
parent fbad2e0ce4
commit e34145b6b0
15 changed files with 401 additions and 88 deletions

View File

@ -0,0 +1,18 @@
# Building Nightwave.NET for Workgroups
In theory, you can build Nightwave.NET by simply loading the solution
in Visual Studio 2019 or newer, allowing the nuget packages
to restore, and then cleaning and building the solution. This
hasn't been thoroughly tested.
# Releasing Nightwave.NET for Workgroups
For a release of Nightwave.NET, as it is now based on .NET Core 3,
you must ensure the package contains the following files, in
addition to any generated EXE and DLL files (incl. in subfolders):
* _ProgramExeName_.runtimeconfig.json
Without this, the application will silently fail to open.
## Signing a release
TBD because I can't afford to (and cannot be bothered to) get
an actual code signing key from a standard trusted authority.

View File

@ -1,7 +1,7 @@
WinPlaza and libplaza are licensed under the BSD-3-Clause license provided below:
# Nightwave.NET for Workgroups & libplaza license
Copyright 2019, [Matthew Connelly][1]
## BSD-3-Clause
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
@ -14,12 +14,12 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
[1]: https://maff.scot
Third-Party licenses are included below.
# Third-Party Licenses & Acknowledgements
#ManagedBass
## ManagedBass
Copyright (c) 2016 [Mathew Sachin](https://github.com/MathewSachin)
## The MIT License
### The MIT License
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,
@ -35,11 +35,12 @@ 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.
#Newtonsoft JSON.Net
The MIT License (MIT)
## Newtonsoft JSON.Net
Copyright (c) 2007 James Newton-King
### The MIT License (MIT)
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
@ -57,11 +58,11 @@ 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.
#Meziantou.Framework, Meziantou.Framework.Win32.CredentialManager
MIT License
## Meziantou.Framework, Meziantou.Framework.Win32.CredentialManager
Copyright (c) 2019 Gérald Barré
### MIT License
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
@ -80,9 +81,12 @@ 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.
#Bass
Bass is commercial software and is used in this application within the bounds of the licensing specifications
listed on the un4seen website. The copyright notice from its headers is listed below in lieu of an actual
license file, as none could be found.
## Bass
Copyright (c) 1999-2019 Un4seen Developments Ltd.
Copyright (c) 1999-2019 Un4seen Developments Ltd.
Bass is commercial software and is used in this application
within the bounds of the licensing specifications listed on
the un4seen website.
The copyright notice from its headers is included above
n lieu of an actual license file, as none could be found.

View File

@ -10,6 +10,10 @@ using Meziantou.Framework.Win32;
namespace NightwaveForWorkgroups {
public partial class MainWindow : Window {
#region DLL Imports
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)]
private static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);
#endregion
#region StateVars
private static readonly object BufferLock=new object();
private int BuffCh;
@ -236,6 +240,8 @@ namespace NightwaveForWorkgroups {
e.Handled = true;
}
private void SbVol_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) {
if(!AudioInit)
return;
if(MuteVol >= 0 && sbMute.IsChecked == true)
sbMute.IsChecked = false;
Bass.GlobalStreamVolume = (int)sbVol.Value * 100;
@ -336,16 +342,33 @@ namespace NightwaveForWorkgroups {
#region GUIMethods
public MainWindow() {
InitializeComponent();
// TODO work out if this can be made less gross
// BASS library must explicitly be named "bass.dll" in order to be loaded (seemingly..) so arch-dependent directory is needed.
if(Environment.Is64BitProcess) {
if(LoadLibrary("lib64/bass.dll") == IntPtr.Zero) {
int lasterror = Marshal.GetLastWin32Error();
System.ComponentModel.Win32Exception innerEx = new System.ComponentModel.Win32Exception(lasterror);
innerEx.Data.Add("LastWin32Error", lasterror);
throw new Exception("can't load DLL", innerEx);
}
} else {
if(LoadLibrary("lib32/bass.dll") == IntPtr.Zero) {
int lasterror = Marshal.GetLastWin32Error();
System.ComponentModel.Win32Exception innerEx = new System.ComponentModel.Win32Exception(lasterror);
innerEx.Data.Add("LastWin32Error", lasterror);
throw new Exception("can't load DLL", innerEx);
}
}
if(!Bass.Init())
sbStatus.Text = "Unable to initialise audio subsystem";
else
AudioInit = true;
tRefresh = new Timer(300) { AutoReset = true };
tRefresh.Elapsed += EvtRefresh;
tRefresh.Start();
tLogon = new Timer(1000) { AutoReset = false };
tLogon.Elapsed += EvtLogon;
tLogon.Start();
if(!Bass.Init())
sbStatus.Text = "Unable to initialise audio subsystem";
else
AudioInit = true;
if(!AudioInit)
return;
tAudio = new Timer(50);

View File

@ -11,41 +11,50 @@
<FileVersion>1.7.0.0</FileVersion>
<NeutralLanguage>en-GB</NeutralLanguage>
<PackageProjectUrl>https://soft.pup.cloud/Nightwave.NET/</PackageProjectUrl>
<RepositoryUrl>https://git.maff.scot/maff/PlazaSharp</RepositoryUrl>
<RepositoryUrl>https://git.maff.scot/maff/PlazaSharp/src/branch/master/NightwaveForWorkgroups</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageLicenseExpression>BSD-3-CLAUSE</PackageLicenseExpression>
<Version>1.7.0</Version>
<ApplicationManifest>app.manifest</ApplicationManifest>
<ApplicationIcon>Resources\app.ico</ApplicationIcon>
<StartupObject>NightwaveForWorkgroups.App</StartupObject>
<Description>An unofficial but lovingly-crafted digital tuner for the premier cyberspace radio station from the alternate future we wish we had, Nightwave Plaza.</Description>
<Copyright>Nightwave Plaza is wholly copyright and owned by its creator, I just wrote this unofficial app that talks to it.</Copyright>
<AssemblyName>NightwaveDotNET</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DefineConstants />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>DEBUG;TRACE</DefineConstants>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Remove="bass.dll" />
<None Remove="bass-x64.dll" />
<None Remove="Resources\app.ico" />
<None Remove="Resources\app.png" />
<None Remove="Resources\music.png" />
<None Remove="Resources\bass-x86.dll" />
<None Remove="Resources\muted.png" />
<None Remove="Resources\nomusic.png" />
<None Remove="Resources\playstop.png" />
<None Remove="Resources\unmuted.png" />
<None Remove="Resources\usr.ico" />
<None Remove="Resources\usr.png" />
</ItemGroup>
<ItemGroup>
<Content Include="bass.dll">
<EmbeddedResource Include="lib64\bass.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\app.ico" />
<EmbeddedResource Include="Resources\usr.ico" />
<EmbeddedResource Include="lib32\bass.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
@ -58,10 +67,7 @@
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\app.png" />
<Resource Include="Resources\music.png" />
<Resource Include="Resources\muted.png" />
<Resource Include="Resources\nomusic.png" />
<Resource Include="Resources\playstop.png" />
<Resource Include="Resources\unmuted.png" />
<Resource Include="Resources\usr.png" />

View File

@ -1,10 +1,20 @@
# WinPlaza (Nightwave.NET)
# Nightwave.NET for Workgroups
An unofficial client for [Nightwave Plaza][1], which aims to implement as much functionality of the site as possible while maintaining aesthetics.
An unofficial client for [Nightwave Plaza][1], which aims to
implement as much functionality of the site as possible
while maintaining aesthetics.
Intended future improvements include:
* Optional session storage between sessions to avoid logging in again
* Multiple visualiser types
* Better use of additional application real-estate when resized
* Integration with the Windows native media APIs (so keyboard play/pause buttons work)
## First-Party
Nightwave.NET uses *libplaza*, a basic .Net interface for the Nightwave Plaza API.
Nightwave.NET uses **libplaza**, a basic .Net interface for
the Nightwave Plaza API. **libplaza** can be found in the same
Git repository as **Nightwave.NET for Workgroups**.
## Third-Party

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

40
libplaza/LICENSE.md Normal file
View File

@ -0,0 +1,40 @@
# libplaza license
Copyright 2019, [Matthew Connelly][1]
## BSD-3-Clause
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[1]: https://maff.scot
# Third-Party Licenses & Acknowledgements
## Newtonsoft JSON.Net
Copyright (c) 2007 James Newton-King
### The MIT License (MIT)
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.

View File

@ -4,9 +4,6 @@ using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <summary>
/// Classes and other definitions relating to the <see cref="Nightwave"/> Plaza API
/// </summary>
namespace libplaza {
#region API models
/// <summary>
@ -57,10 +54,6 @@ namespace libplaza {
/// A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
/// </summary>
public int hates;
/// <summary>
/// A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
/// </summary>
}
/// <summary>

View File

@ -5,6 +5,13 @@
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<NeutralLanguage>en-GB</NeutralLanguage>
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<PackageLicenseExpression>BSD-3-CLAUSE</PackageLicenseExpression>
<Authors>Maff</Authors>
<Company>Softpup Aesthetics &amp; Petting, p.r.p.l.</Company>
<Description>A moderately generic .Net interface to the Nightwave Plaza API</Description>
<Copyright>Nightwave Plaza is wholly copyright and owned by its creator, I just wrote this unofficial library that talks to it.</Copyright>
<PackageProjectUrl>https://soft.pup.cloud/Nightwave.NET/</PackageProjectUrl>
<RepositoryUrl>https://git.maff.scot/maff/PlazaSharp/src/branch/master/libplaza</RepositoryUrl>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

View File

@ -4,105 +4,317 @@
<name>libplaza</name>
</assembly>
<members>
<member name="T:libplaza.PlazaPlayback">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.artist">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.title">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.album">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.length">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.position">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.artwork">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.artwork_s">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.likes">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaPlayback.hates">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaJson">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaJson.maintenance">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaJson.listeners">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaJson.updated_at">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaJson.playback">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaUser">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaUser.id">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaUser.username">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaUser.email">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaUser.role">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaUser.created_at">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaVote">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaVote.status">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaVote.ratings">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaGetVote">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaGetVote.rate">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaLogoutResult">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaLogoutResult.status">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaLogonResult">
<summary>
A transitional class used internally by <see cref="M:Newtonsoft.Json.JsonConvert.DeserializeObject``1(System.String)"/>
</summary>
</member>
<member name="F:libplaza.PlazaLogonResult.status">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaLogonResult.username">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaLogonResult.email">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="F:libplaza.PlazaLogonResult.token">
<summary>
A representation of a JSON object attribute, used transitionally while processing a deserialized JSON payload
</summary>
</member>
<member name="T:libplaza.PlazaInMaintenanceException">
<summary>
An <see cref="T:System.Exception"/> object indicating that the <c>Nightwave</c> API is under maintenance
An <see cref="T:System.Exception"/> object indicating that the <see cref="T:libplaza.Nightwave"/> API is under maintenance
</summary>
</member>
<member name="T:libplaza.PlazaUnavailableException">
<summary>
An <see cref="T:System.Exception"/> object indicating that an error or exception occurred when communicating with the <c>Nightwave</c> API.
An <see cref="T:System.Exception"/> object indicating that an error or exception occurred when communicating with the <see cref="T:libplaza.Nightwave"/> API.
</summary>
</member>
<member name="T:libplaza.Status">
<summary>
A <c>Status</c> object represents the current broadcast information returned by a <c>Nightwave</c> API object.
</summary>
<summary>
Represents the current broadcast information returned by a <see cref="T:libplaza.Nightwave"/> API object.
</summary>
</member>
<member name="F:libplaza.Status.InMaintenance">
<summary><c>InMaintenance</c> indicates whether the <c>Nightwave</c> API is in maintenance mode</summary>
<summary>
Indicates whether the <see cref="T:libplaza.Nightwave"/> API is in maintenance mode
</summary>
</member>
<member name="F:libplaza.Status.FaultOccurred">
<summary><c>FaultOccurred</c> indicates whether an exception occurred while querying the <c>Nightwave</c> API</summary>
<summary>
Indicates whether an exception occurred while querying the <see cref="T:libplaza.Nightwave"/> API
</summary>
</member>
<member name="F:libplaza.Status.Title">
<summary><c>Title</c> contains the currently-playing track's title</summary>
<summary>
Contains the currently-playing track's title
</summary>
</member>
<member name="F:libplaza.Status.Artist">
<summary><c>Artist</c> contains the currently-playing track's creating artist</summary>
<summary>
Contains the currently-playing track's creating artist
</summary>
</member>
<member name="F:libplaza.Status.Album">
<summary><c>Album</c> contains the currently-playing track's album, if any</summary>
<summary>
Contains the currently-playing track's album, if any
</summary>
</member>
<member name="F:libplaza.Status.ArtworkUri">
<summary><c>ArtworkUri</c> contains a relative URI to the artwork for the currently-playing track</summary>
<summary>
Contains a relative URI to the artwork for the currently-playing track
</summary>
</member>
<member name="F:libplaza.Status.Elapsed">
<summary><c>Elapsed</c> contains an integer value of the elapsed seconds for the current track</summary>
<summary>
Contains an integer value of the elapsed seconds for the current track
</summary>
</member>
<member name="F:libplaza.Status.Duration">
<summary><c>Duration</c> contains an integer value of the duration in seconds of the current track</summary>
<summary>
Contains an integer value of the duration in seconds of the current track
</summary>
</member>
<member name="F:libplaza.Status.Since">
<summary><c>Since</c> contains a 64-bit integer value of the epoch timestamp when the broadcast information was updated</summary>
<summary>
Contains a 64-bit integer value of the epoch timestamp when the broadcast information was updated
</summary>
</member>
<member name="F:libplaza.Status.ServerTimeOffset">
<summary><c>ServerTimeOffset</c> contains an integer value of the time difference between the local computer and the <c>Nightwave</c> API server</summary>
<summary>
Contains an integer value of the time difference between the local computer and the <see cref="T:libplaza.Nightwave"/> API server
</summary>
</member>
<member name="P:libplaza.Status.CalculatedElapsed">
<summary><c>CalculatedElapsed</c> returns a dynamically-generated integer value of the elapsed seconds, taking time offsets and time since <see cref="F:libplaza.Status.Since"/></summary>
<summary>
Returns a dynamically-generated integer value of the elapsed seconds, taking time offsets and time since <see cref="F:libplaza.Status.Since"/>
</summary>
</member>
<member name="F:libplaza.Status.Likes">
<summary><c>Likes</c> contains an integer value of the number of likes the currently-playing track has received</summary>
<summary>
Contains an integer value of the number of likes the currently-playing track has received
</summary>
</member>
<member name="F:libplaza.Status.Dislikes">
<summary><c>Dislikes</c> contains an integer value of the number of dislikes the currently-playing track has received</summary>
<summary>
Contains an integer value of the number of dislikes the currently-playing track has received
</summary>
</member>
<member name="F:libplaza.Status.Listeners">
<summary><c>Listeners</c> contains an integer value of the number of people currently listening to the broadcast</summary>
<summary>
Contains an integer value of the number of people currently listening to the broadcast
</summary>
</member>
<member name="T:libplaza.Vote">
<summary>
<c>Vote</c> represents the user's disposition towards the currently-playing track.
Represents the user's disposition towards the currently-playing track.
</summary>
</member>
<member name="F:libplaza.Vote.Dislike">
<summary>To <c>Dislike</c> is to indicate the user's disposition towards this track is one of displeasure; that the user does not appreciate hearing this track, perhaps even that the user wishes not to hear this track.</summary>
<summary>
To <c>Dislike</c> is to indicate the user's disposition towards this track is one of displeasure;
that the user does not appreciate hearing this track, perhaps even that the user wishes not to hear this track.
</summary>
</member>
<member name="F:libplaza.Vote.Neutral">
<summary>To be of <c>Neutral</c> disposition is to indicate the user has no feelings towards this track, or that the user does have feelings, but not strong enough to be worth expressing</summary>
<summary>
To be of <c>Neutral</c> disposition is to indicate the user has no feelings towards this track,
or that the user does have feelings, but not strong enough to be worth expressing
</summary>
</member>
<member name="F:libplaza.Vote.Like">
<summary>To <c>Like</c> is to indicate the user's disposition towards this track is one of enjoyment or pleasure; that the user appreciated this track and/or wishes to indicate such.</summary>
<summary>
To <c>Like</c> is to indicate the user's disposition towards this track is one of enjoyment or pleasure;
that the user appreciated this track and/or wishes to indicate such.
</summary>
</member>
<member name="F:libplaza.Vote.Favourite">
<summary>To <c>Favourite</c> is functionally equivalent to <see cref="F:libplaza.Vote.Like"/>, with the additional effect of adding the track to the user's favourites list.</summary>
<summary>
To <c>Favourite</c> is functionally equivalent to <see cref="F:libplaza.Vote.Like"/>, with the additional effect of
adding the track to the user's favourites list.
</summary>
</member>
<member name="T:libplaza.Nightwave">
<summary>
<c>Nightwave</c> is the primary class by which the Nightwave Plaza API can be used.
<see cref="T:libplaza.Nightwave"/> is the primary class by which the Nightwave Plaza API can be used.
</summary>
</member>
<member name="F:libplaza.Nightwave.MinRefreshTime">
<summary><c>MinRefreshTime</c> represents the minimum number of seconds that must pass before the cached <c>Status</c> may be invalidated</summary>
<summary>
<see cref="F:libplaza.Nightwave.MinRefreshTime"/> represents the minimum number of seconds that must pass before the cached <see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> may be invalidated
</summary>
</member>
<member name="M:libplaza.Nightwave.#ctor(System.String)">
<summary>
Creates a new <c>Nightwave</c> instance.
Creates a new <see cref="T:libplaza.Nightwave"/> instance.
</summary>
<param name="baseuri">Specify an alternate URI for the API - useful if testing a dev server.</param>
<example>
To create a <c>Nightwave</c> API object targeting the production Nightwave Plaza API:
To create a <see cref="T:libplaza.Nightwave"/> API object targeting the production Nightwave Plaza API:
<code>
Nightwave nw = new Nightwave();
<see cref="T:libplaza.Nightwave"/> nw = new <see cref="T:libplaza.Nightwave"/>();
</code>
To create a <c>Nightwave</c> API object targeting a local server (eg., during development):
<code>Nightwave nwd = new Nightwave("http://localhost:8000");</code>
To create a <see cref="T:libplaza.Nightwave"/> API object targeting a local server (eg., during development):
<code><see cref="T:libplaza.Nightwave"/> nwd = new <see cref="T:libplaza.Nightwave"/>("http://localhost:8000");</code>
</example>
</member>
<member name="M:libplaza.Nightwave.Finalize">
<summary>
De-initialises the <c>Nightwave</c> API object.
<see cref="T:libplaza.Nightwave"/> object deconstructor. Simply a wrapper to ensure that <see cref="M:libplaza.Nightwave.Dispose"/> is called.
</summary>
</member>
<member name="M:libplaza.Nightwave.Dispose">
<summary>
De-initialises the <see cref="T:libplaza.Nightwave"/> API object.
<para>Currently, this is equivalent to synchronously logging out the current session.</para>
</summary>
</member>
@ -113,15 +325,15 @@
<example>
If Nightwave Plaza is broadcasting normally:
<code>
Nightwave n = new Nightwave();
Status s = await n.Status();
<see cref="T:libplaza.Nightwave"/> n = new Nightwave();
<see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> s = await n.Status();
Console.WriteLine(s.Title);
</code>
The Console output would show "リサフランク420 / 現代のコンピュー", if that track were playing.
In the event that an HTTP request fails or Nightwave Plaza is in maintenance mode, the appropriate flag will be set
<code>
Nightwave n = new Nightwave();
Status s = await n.Status();
<see cref="T:libplaza.Nightwave"/> n = new Nightwave();
<see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> s = await n.Status();
if (s.InMaintenance) {
Console.WriteLine("In maintenance!");
return;
@ -134,13 +346,13 @@
The Console output would show "In maintenance!" or "A fault occurred!", depending on the conditions.
</example>
<remarks>
This method has inherent caching, and thus will not necessarily result in the <c>Status</c> object returned being fully fresh.
The <c>Status</c> object being returned may be a cached object UNLESS the <paramref name="Force"/> parameter is true
OR the <c>Status</c> object is older than the number of seconds stored by <see cref="F:libplaza.Nightwave.MinRefreshTime"/>
OR <c>Status.CalculatedElapsed</c> is equal to or greater than <c>Status.Duration</c>.
This method has inherent caching, and thus will not necessarily result in the <see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> object returned being fully fresh.
The <see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> object being returned may be a cached object UNLESS the <paramref name="Force"/> parameter is true
OR the <see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> object is older than the number of seconds stored by <see cref="F:libplaza.Nightwave.MinRefreshTime"/>
OR <see cref="P:libplaza.Status.CalculatedElapsed"/> is equal to or greater than <see cref="F:libplaza.Status.Duration"/>.
</remarks>
<param name="Force">If true, the API will always be queried, and no caching will be performed.</param>
<returns>A populated <c>Status</c> object describing the current broadcast details.</returns>
<returns>A populated <see cref="M:libplaza.Nightwave.Status(System.Boolean)"/> object describing the current broadcast details.</returns>
</member>
<member name="M:libplaza.Nightwave.Update">
<summary>
@ -150,7 +362,7 @@
</member>
<member name="M:libplaza.Nightwave.GetNightwaveAsync">
<summary>
Communicates with the <c>Nightwave</c> API to retrieve the current broadcast information.
Communicates with the <see cref="T:libplaza.Nightwave"/> API to retrieve the current broadcast information.
</summary>
<returns>Returns a <c>Status</c> object representing the current broadcast information.</returns>
<exception cref="T:libplaza.PlazaUnavailableException">May be thrown in event of a non-success (HTTP/1.1 2XX) return code</exception>
@ -173,7 +385,7 @@
<summary>
An overload method to <see cref="M:libplaza.Nightwave.CheckSession(System.String)"/> to first set the <c>X-Access-Token</c> header to <paramref name="str"/>
</summary>
<param name="str">A valid session token for the <c>Nightwave</c> API</param>
<param name="str">A valid session token for the <see cref="T:libplaza.Nightwave"/> API</param>
<returns>A <c>bool</c>ean value indicating whether the token given in <paramref name="str"/> was able to perform an authenticated API request</returns>
</member>
<member name="M:libplaza.Nightwave.CheckSession">
@ -190,7 +402,7 @@
</member>
<member name="M:libplaza.Nightwave.Login(System.String,System.String)">
<summary>
Performs a login request to the <c>Nightwave</c> API with the given <paramref name="u">username</paramref> and <paramref name="p">password</paramref>.
Performs a login request to the <see cref="T:libplaza.Nightwave"/> API with the given <paramref name="u">username</paramref> and <paramref name="p">password</paramref>.
</summary>
<param name="u">A <c>string</c> containing the user's username</param>
<param name="p">A <c>string</c> containing the user's password</param>
@ -201,14 +413,14 @@
</member>
<member name="M:libplaza.Nightwave.Login(System.String)">
<summary>
Performs a login request to the <c>Nightwave</c> API with the given HTTP Basic authentication <paramref name="str">string</paramref>.
Performs a login request to the <see cref="T:libplaza.Nightwave"/> API with the given HTTP Basic authentication <paramref name="str">string</paramref>.
</summary>
<param name="str">A valid HTTP Basic authentication string (<c>md5(username:password)</c>)</param>
<returns>A <c>bool</c>ean value indicating whether the login attempt succeeded</returns>
</member>
<member name="M:libplaza.Nightwave.Logout">
<summary>
Performs a logout request to the <c>Nightwave</c> API.
Performs a logout request to the <see cref="T:libplaza.Nightwave"/> API.
</summary>
<returns>If called with <c>await</c>, returns nothing. Otherwise, returns a <c>Task</c> object representing the method call</returns>
</member>