Ejemplo n.º 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)
                    {
                        try
                        {
                            QueryResult result = new QueryResult(line, true);
                            queryResultsColl.Add(result);
                        }
                        catch
                        { }
                    }

                    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;

            }
        }