mirror of
https://github.com/ZetaKebab/MpcNET.git
synced 2025-01-14 22:18:43 +00:00
Decoders command + test. Still to Assert response depending on build server.
This commit is contained in:
parent
ed2604f81b
commit
89990d5e81
@ -1,5 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using LibMpc.Types;
|
||||||
|
|
||||||
namespace LibMpc
|
namespace LibMpc
|
||||||
{
|
{
|
||||||
@ -53,7 +54,41 @@ namespace LibMpc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: decoders
|
public class Decoders : IMpcCommand<IEnumerable<MpdDecoderPlugin>>
|
||||||
|
{
|
||||||
|
public string Value => "decoders";
|
||||||
|
|
||||||
|
public IEnumerable<MpdDecoderPlugin> FormatResponse(IList<KeyValuePair<string, string>> response)
|
||||||
|
{
|
||||||
|
var result = new List<MpdDecoderPlugin>();
|
||||||
|
|
||||||
|
var mpdDecoderPlugin = MpdDecoderPlugin.Empty;
|
||||||
|
foreach (var line in response)
|
||||||
|
{
|
||||||
|
if (line.Key.Equals("plugin"))
|
||||||
|
{
|
||||||
|
if (mpdDecoderPlugin.IsInitialized)
|
||||||
|
{
|
||||||
|
result.Add(mpdDecoderPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
mpdDecoderPlugin = new MpdDecoderPlugin(line.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.Key.Equals("suffix") && mpdDecoderPlugin.IsInitialized)
|
||||||
|
{
|
||||||
|
mpdDecoderPlugin.AddSuffix(line.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.Key.Equals("mime_type") && mpdDecoderPlugin.IsInitialized)
|
||||||
|
{
|
||||||
|
mpdDecoderPlugin.AddMediaType(line.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
LibMpc/Types/MpdDecoderPlugin.cs
Normal file
36
LibMpc/Types/MpdDecoderPlugin.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace LibMpc.Types
|
||||||
|
{
|
||||||
|
public class MpdDecoderPlugin
|
||||||
|
{
|
||||||
|
public static readonly MpdDecoderPlugin Empty = new MpdDecoderPlugin(string.Empty);
|
||||||
|
|
||||||
|
private readonly IList<string> _suffixes = new List<string>();
|
||||||
|
private readonly IList<string> _mediaTypes = new List<string>();
|
||||||
|
|
||||||
|
public MpdDecoderPlugin(string name)
|
||||||
|
{
|
||||||
|
name.CheckNotNull();
|
||||||
|
|
||||||
|
Name = name;
|
||||||
|
IsInitialized = !string.IsNullOrEmpty(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name { get; }
|
||||||
|
public IEnumerable<string> Suffixes => _suffixes;
|
||||||
|
public IEnumerable<string> MediaTypes => _mediaTypes;
|
||||||
|
|
||||||
|
internal bool IsInitialized { get; }
|
||||||
|
|
||||||
|
internal void AddSuffix(string suffix)
|
||||||
|
{
|
||||||
|
_suffixes.Add(suffix);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void AddMediaType(string type)
|
||||||
|
{
|
||||||
|
_mediaTypes.Add(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,106 +1,106 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace LibMpc.Types
|
namespace LibMpc.Types
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The MpdFile class contains all meta data for a file of the MPD.
|
/// The MpdFile class contains all meta data for a file of the MPD.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MpdFile
|
public class MpdFile
|
||||||
{
|
{
|
||||||
public static readonly MpdFile EmptyFile = new MpdFile(string.Empty);
|
public static readonly MpdFile EmptyFile = new MpdFile(string.Empty);
|
||||||
|
|
||||||
private const string TagTime = "Time";
|
private const string TagTime = "Time";
|
||||||
private const string TagArtist = "Artist";
|
private const string TagArtist = "Artist";
|
||||||
private const string TagAlbum = "Album";
|
private const string TagAlbum = "Album";
|
||||||
private const string TagTitle = "Title";
|
private const string TagTitle = "Title";
|
||||||
private const string TagTrack = "Track";
|
private const string TagTrack = "Track";
|
||||||
private const string TagName = "Name";
|
private const string TagName = "Name";
|
||||||
private const string TagGenre = "Genre";
|
private const string TagGenre = "Genre";
|
||||||
private const string TagDate = "Date";
|
private const string TagDate = "Date";
|
||||||
private const string TagComposer = "Composer";
|
private const string TagComposer = "Composer";
|
||||||
private const string TagPerformer = "Performer";
|
private const string TagPerformer = "Performer";
|
||||||
private const string TagComment = "Comment";
|
private const string TagComment = "Comment";
|
||||||
private const string TagDisc = "Disc";
|
private const string TagDisc = "Disc";
|
||||||
private const string TagPos = "Pos";
|
private const string TagPos = "Pos";
|
||||||
private const string TagId = "Id";
|
private const string TagId = "Id";
|
||||||
|
|
||||||
private readonly IDictionary<string, string> _unknownTags = new Dictionary<string, string>();
|
private readonly IDictionary<string, string> _unknownTags = new Dictionary<string, string>();
|
||||||
|
|
||||||
public MpdFile(string file)
|
public MpdFile(string file)
|
||||||
{
|
{
|
||||||
File = file;
|
File = file;
|
||||||
IsInitialized = !string.IsNullOrEmpty(File);
|
IsInitialized = !string.IsNullOrEmpty(File);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string File { get; }
|
public string File { get; }
|
||||||
public int Time { get; private set; } = -1;
|
public int Time { get; private set; } = -1;
|
||||||
public string Album { get; private set; } = string.Empty;
|
public string Album { get; private set; } = string.Empty;
|
||||||
public string Artist { get; private set; } = string.Empty;
|
public string Artist { get; private set; } = string.Empty;
|
||||||
public string Title { get; private set; } = string.Empty;
|
public string Title { get; private set; } = string.Empty;
|
||||||
public string Track { get; private set; } = string.Empty;
|
public string Track { get; private set; } = string.Empty;
|
||||||
public string Name { get; private set; } = string.Empty;
|
public string Name { get; private set; } = string.Empty;
|
||||||
public string Genre { get; private set; } = string.Empty;
|
public string Genre { get; private set; } = string.Empty;
|
||||||
public string Date { get; private set; } = string.Empty;
|
public string Date { get; private set; } = string.Empty;
|
||||||
public string Composer { get; private set; } = string.Empty;
|
public string Composer { get; private set; } = string.Empty;
|
||||||
public string Performer { get; private set; } = string.Empty;
|
public string Performer { get; private set; } = string.Empty;
|
||||||
public string Comment { get; private set; } = string.Empty;
|
public string Comment { get; private set; } = string.Empty;
|
||||||
public int Disc { get; private set; } = -1;
|
public int Disc { get; private set; } = -1;
|
||||||
public int Pos { get; private set; } = -1;
|
public int Pos { get; private set; } = -1;
|
||||||
public int Id { get; private set; } = -1;
|
public int Id { get; private set; } = -1;
|
||||||
public IDictionary<string, string> UnknownTags => _unknownTags;
|
public IDictionary<string, string> UnknownTags => _unknownTags;
|
||||||
|
|
||||||
internal bool IsInitialized { get; }
|
internal bool IsInitialized { get; }
|
||||||
|
|
||||||
internal void AddTag(string tag, string value)
|
internal void AddTag(string tag, string value)
|
||||||
{
|
{
|
||||||
switch (tag)
|
switch (tag)
|
||||||
{
|
{
|
||||||
case TagTime:
|
case TagTime:
|
||||||
Time = int.Parse(value);
|
Time = int.Parse(value);
|
||||||
break;
|
|
||||||
case TagArtist:
|
|
||||||
Artist = value;
|
|
||||||
break;
|
|
||||||
case TagAlbum:
|
|
||||||
Album = value;
|
|
||||||
break;
|
|
||||||
case TagTitle:
|
|
||||||
Title = value;
|
|
||||||
break;
|
|
||||||
case TagTrack:
|
|
||||||
Track = value;
|
|
||||||
break;
|
|
||||||
case TagName:
|
|
||||||
Name = value;
|
|
||||||
break;
|
|
||||||
case TagGenre:
|
|
||||||
Genre = value;
|
|
||||||
break;
|
|
||||||
case TagDate:
|
|
||||||
Date = value;
|
|
||||||
break;
|
|
||||||
case TagComposer:
|
|
||||||
Composer = value;
|
|
||||||
break;
|
|
||||||
case TagPerformer:
|
|
||||||
Performer = value;
|
|
||||||
break;
|
break;
|
||||||
case TagComment:
|
case TagArtist:
|
||||||
Comment = value;
|
Artist = value;
|
||||||
break;
|
break;
|
||||||
case TagDisc:
|
case TagAlbum:
|
||||||
Disc = int.Parse(value);
|
Album = value;
|
||||||
break;
|
break;
|
||||||
case TagPos:
|
case TagTitle:
|
||||||
Pos = int.Parse(value);
|
Title = value;
|
||||||
break;
|
break;
|
||||||
case TagId:
|
case TagTrack:
|
||||||
Id = int.Parse(value);
|
Track = value;
|
||||||
break;
|
break;
|
||||||
default:
|
case TagName:
|
||||||
_unknownTags.Add(tag, value);
|
Name = value;
|
||||||
break;
|
break;
|
||||||
}
|
case TagGenre:
|
||||||
}
|
Genre = value;
|
||||||
}
|
break;
|
||||||
}
|
case TagDate:
|
||||||
|
Date = value;
|
||||||
|
break;
|
||||||
|
case TagComposer:
|
||||||
|
Composer = value;
|
||||||
|
break;
|
||||||
|
case TagPerformer:
|
||||||
|
Performer = value;
|
||||||
|
break;
|
||||||
|
case TagComment:
|
||||||
|
Comment = value;
|
||||||
|
break;
|
||||||
|
case TagDisc:
|
||||||
|
Disc = int.Parse(value);
|
||||||
|
break;
|
||||||
|
case TagPos:
|
||||||
|
Pos = int.Parse(value);
|
||||||
|
break;
|
||||||
|
case TagId:
|
||||||
|
Id = int.Parse(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_unknownTags.Add(tag, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -52,5 +52,16 @@ namespace LibMpcTest
|
|||||||
Assert.True(response.Response.Body.Any(handler => handler.Equals("gopher://")));
|
Assert.True(response.Response.Body.Any(handler => handler.Equals("gopher://")));
|
||||||
Assert.True(response.Response.Body.Any(handler => handler.Equals("rtp://")));
|
Assert.True(response.Response.Body.Any(handler => handler.Equals("rtp://")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task DecodersTest()
|
||||||
|
{
|
||||||
|
var response = await Mpc.SendAsync(new Commands.Reflection.Decoders());
|
||||||
|
|
||||||
|
TestOutput.WriteLine($"DecodersTest (decoders: {response.Response.Body.Count()}) Result:");
|
||||||
|
TestOutput.WriteLine(JsonConvert.SerializeObject(response, Formatting.Indented));
|
||||||
|
|
||||||
|
// TODO: Assert
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user