Example #1
0
        /// <summary>
        /// Query the freedb server to see if there is information on this cd
        /// </summary>
        /// <param name="querystring"></param>
        /// <param name="queryResult"></param>
        /// <param name="queryResultsColl"></param>
        /// <returns></returns>
        public string Query(string querystring, out QueryResult queryResult, out QueryResultCollection queryResultsColl)
        {
            queryResult      = null;
            queryResultsColl = null;
            StringCollection coll = null;

            StringBuilder builder = new StringBuilder(FreedbHelper.Commands.CMD_QUERY);

            builder.Append("+");
            builder.Append(querystring);

            //make call
            try
            {
                coll = Call(builder.ToString());
            }

            catch (Exception ex)
            {
                string    msg   = "Unable to perform cddb query.";
                Exception newex = new Exception(msg, ex);
                throw newex;
            }

            // check if results came back
            if (coll.Count < 0)
            {
                string    msg = "No results returned from cddb query.";
                Exception ex  = new Exception(msg, null);
                throw ex;
            }

            string code = GetCode(coll[0]);

            if (code == ResponseCodes.CODE_INVALID)
            {
                string    msg = "Unable to process results returned for query: Data returned: " + coll[0];
                Exception ex  = new Exception(msg, null);
                throw ex;
            }


            switch (code)
            {
            case ResponseCodes.CODE_500:
                return(ResponseCodes.CODE_500);

            // Multiple results were returned
            // Put them into a queryResultCollection object
            case ResponseCodes.CODE_211:
            case ResponseCodes.CODE_210:
            {
                queryResultsColl = new QueryResultCollection();
                //remove the 210 or 211
                coll.RemoveAt(0);
                foreach (string line in coll)
                {
                    QueryResult result = new QueryResult(line, true);
                    queryResultsColl.Add(result);
                }

                return(ResponseCodes.CODE_211);
            }


            // exact match
            case ResponseCodes.CODE_200:
            {
                queryResult = new QueryResult(coll[0]);
                return(ResponseCodes.CODE_200);
            }


            //not found
            case ResponseCodes.CODE_202:
                return(ResponseCodes.CODE_202);

            //Database entry is corrupt
            case ResponseCodes.CODE_403:
                return(ResponseCodes.CODE_403);

            //no handshake
            case ResponseCodes.CODE_409:
                return(ResponseCodes.CODE_409);

            default:
                return(ResponseCodes.CODE_500);
            }             // end of switch
        }