Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Media/Song.cs
195 lines | 3.1 KiB | text/x-csharp | CSharpLexer
195 lines | 3.1 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
using System.IO; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework.Media | ||||
{ | ||||
public sealed class Song : IEquatable<Song>, IDisposable | ||||
{ | ||||
#region Public Properties | ||||
public string Name | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
public TimeSpan Duration | ||||
{ | ||||
get; | ||||
internal set; | ||||
} | ||||
public bool IsProtected | ||||
{ | ||||
get | ||||
{ | ||||
return false; | ||||
} | ||||
} | ||||
public bool IsRated | ||||
{ | ||||
get | ||||
{ | ||||
return false; | ||||
} | ||||
} | ||||
public int PlayCount | ||||
{ | ||||
get; | ||||
internal set; | ||||
} | ||||
public int Rating | ||||
{ | ||||
get | ||||
{ | ||||
return 0; | ||||
} | ||||
} | ||||
public int TrackNumber | ||||
{ | ||||
get | ||||
{ | ||||
return 0; | ||||
} | ||||
} | ||||
#endregion | ||||
#region Public IDisposable Properties | ||||
public bool IsDisposed | ||||
{ | ||||
get; | ||||
private set; | ||||
} | ||||
#endregion | ||||
#region Internal Variables | ||||
internal string handle; | ||||
#endregion | ||||
#region Constructors, Deconstructor, Dispose() | ||||
internal Song(string fileName, string name = null) | ||||
{ | ||||
if (!File.Exists(fileName)) | ||||
{ | ||||
throw new FileNotFoundException(fileName); | ||||
} | ||||
handle = fileName; | ||||
Name = name; | ||||
IsDisposed = false; | ||||
} | ||||
internal Song(string fileName, int durationMS) : this(fileName) | ||||
{ | ||||
Duration = TimeSpan.FromMilliseconds(durationMS); | ||||
} | ||||
~Song() | ||||
{ | ||||
Dispose(); | ||||
} | ||||
public void Dispose() | ||||
{ | ||||
IsDisposed = true; | ||||
} | ||||
#endregion | ||||
#region Public Comparison Methods/Operators | ||||
public bool Equals(Song song) | ||||
{ | ||||
return (((object) song) != null) && (handle == song.handle); | ||||
} | ||||
public override bool Equals(Object obj) | ||||
{ | ||||
if (obj == null) | ||||
{ | ||||
return false; | ||||
} | ||||
return Equals(obj as Song); | ||||
} | ||||
public static bool operator ==(Song song1, Song song2) | ||||
{ | ||||
if (((object) song1) == null) | ||||
{ | ||||
return ((object) song2) == null; | ||||
} | ||||
return song1.Equals(song2); | ||||
} | ||||
public static bool operator !=(Song song1, Song song2) | ||||
{ | ||||
return !(song1 == song2); | ||||
} | ||||
public override int GetHashCode() | ||||
{ | ||||
return base.GetHashCode(); | ||||
} | ||||
#endregion | ||||
#region Public Static Methods | ||||
/// <summary> | ||||
/// Constructs a new Song object based on the specified URI. | ||||
/// </summary> | ||||
/// <remarks> | ||||
/// This method matches the signature of the one in XNA4, however we currently can't play remote songs, so | ||||
/// the URI is required to be a file name and the code uses the LocalPath property only. | ||||
/// </remarks> | ||||
/// <param name="name">Name of the song.</param> | ||||
/// <param name="uri">Uri object that represents the URI.</param> | ||||
/// <returns>Song object that can be used to play the song.</returns> | ||||
public static Song FromUri(string name, Uri uri) | ||||
{ | ||||
string path; | ||||
if (uri.IsAbsoluteUri) | ||||
{ | ||||
// If it's absolute, be sure we can actually get it... | ||||
if (!uri.IsFile) | ||||
{ | ||||
throw new InvalidOperationException( | ||||
"Only local file URIs are supported for now" | ||||
); | ||||
} | ||||
path = uri.LocalPath; | ||||
} | ||||
else | ||||
{ | ||||
path = Path.Combine( | ||||
TitleLocation.Path, | ||||
uri.ToString() | ||||
); | ||||
} | ||||
return new Song(path, name); | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||