Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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());
        }