/// <summary> /// CDDB リードコマンドの実行 /// </summary> /// <param name="cmdArray"></param> /// <returns></returns> private async Task <string> Read(string[] cmdArray, string userId) { ReadCommand command = null; if (ReadCommand.TryCreate(cmdArray, out command) == false) { return("500 Command syntax error."); } Album[] albums = await this.gracenoteClient.GetAlbumInfo(command.DiscId, userId); return(CddbUtil.CreateReadResponse(command, albums)); }
/// <summary> /// 文字列をパースする /// </summary> /// <param name="cmdArray"></param> /// <param name="command"></param> /// <returns></returns> /// <remarks> /// 仕様書の該当箇所 /// /// Client command: /// -> cddb read categ discid /// categ: /// CD category. Example: rock /// discid: /// CD disc ID number. Example: f50a3b13 /// </remarks> public static bool TryCreate(string[] cmdArray, out ReadCommand command) { command = null; // 足りない if (cmdArray.Length < 4) { return(false); } command = new ReadCommand { Category = cmdArray[2], DiscId = cmdArray[3], }; return(true); }
/// <summary> /// リードコマンドの応答文字列を作成する /// </summary> /// <param name="command"></param> /// <param name="album"></param> /// <returns></returns> public static string CreateReadResponse(ReadCommand command, Album[] albums) { if (albums == null || albums.Length == 0) { return("401 " + command.Category + " " + command.DiscId + " No such CD entry in database." + Environment.NewLine); } Album album = albums[0]; StringBuilder result = new StringBuilder(); result.AppendLine("210 Misc " + album.GN_ID + " CD database entry follows (until terminating `.')"); result.AppendLine("DISCID=" + album.GN_ID); result.AppendLine("DTITLE=" + album.ARTIST + " / " + album.TITLE); result.AppendLine("DYEAR=" + album.DATE); result.AppendLine("DGENRE=" + album.GENRE.Value); for (int i = 0; i < album.TRACK.Length; i++) { string title = album.TRACK[i].TITLE; if (string.IsNullOrWhiteSpace(album.TRACK[i].ARTIST) == false) { title = album.TRACK[i].ARTIST + " / " + title; } result.AppendLine("TTITLE" + i + "=" + title); } result.AppendLine("EXTD="); for (int i = 0; i < album.TRACK.Length; i++) { result.AppendLine("EXTT" + i + "="); } result.AppendLine("PLAYORDER="); result.AppendLine("."); return(result.ToString()); }