/// <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 }