public DLGSelectQueryResult(QueryResultCollection results)
        {
            _Results = results;

            InitializeComponent();

            for (int i = 0; i < _Results.Count; i++)
                this.LBQueryResults.Items.Add(String.Format("{0} - {1} [{2}] ({3})",
                    _Results[i].Artist, _Results[i].Title, _Results[i].Genre.ToUpper(), _Results[i].Discid));
        }
Example #2
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;

            }
        }
        /// <summary>
        /// Creates a shallow copy of the <see cref="QueryResultCollection"/>.
        /// </summary>
        /// <returns>A shallow copy of the <see cref="QueryResultCollection"/>.</returns>
        /// <remarks>Please refer to <see cref="ArrayList.Clone"/> for details.</remarks>
        public virtual object Clone()
        {
            QueryResultCollection collection = new QueryResultCollection(this._count);

            Array.Copy(this._array, 0, collection._array, 0, this._count);
            collection._count = this._count;
            collection._version = this._version;

            return collection;
        }
        /// <overloads>
        /// Adds a range of elements to the end of the <see cref="QueryResultCollection"/>.
        /// </overloads>
        /// <summary>
        /// Adds the elements of another collection to the end of the <see cref="QueryResultCollection"/>.
        /// </summary>
        /// <param name="collection">The <see cref="QueryResultCollection"/> whose elements
        /// should be added to the end of the current collection.</param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="collection"/> is a null reference.</exception>
        /// <exception cref="NotSupportedException">
        /// <para>The <see cref="QueryResultCollection"/> is read-only.</para>
        /// <para>-or-</para>
        /// <para>The <b>QueryResultCollection</b> has a fixed size.</para>
        /// <para>-or-</para>
        /// <para>The <b>QueryResultCollection</b> already contains one or more elements
        /// in the specified <paramref name="collection"/>, and the <b>QueryResultCollection</b>
        /// ensures that all elements are unique.</para></exception>
        /// <remarks>Please refer to <see cref="ArrayList.AddRange"/> for details.</remarks>
        public virtual void AddRange(QueryResultCollection collection)
        {
            if (collection == null)
                throw new ArgumentNullException("collection");

            if (collection.Count == 0) return;
            if (this._count + collection.Count > this._array.Length)
                EnsureCapacity(this._count + collection.Count);

            ++this._version;
            Array.Copy(collection.InnerArray, 0,
                this._array, this._count, collection.Count);
            this._count += collection.Count;
        }
        /// <summary>
        /// Returns a wrapper for the specified <see cref="QueryResultCollection"/>
        /// ensuring that all elements are unique.
        /// </summary>
        /// <param name="collection">The <see cref="QueryResultCollection"/> to wrap.</param>    
        /// <returns>
        /// A wrapper around <paramref name="collection"/> ensuring that all elements are unique.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// <paramref name="collection"/> contains duplicate elements.</exception>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="collection"/> is a null reference.</exception>
        /// <remarks><para>
        /// The <b>Unique</b> wrapper provides a set-like collection by ensuring
        /// that all elements in the <see cref="QueryResultCollection"/> are unique.
        /// </para><para>
        /// <b>Unique</b> raises an <see cref="ArgumentException"/> if the specified 
        /// <paramref name="collection"/> contains any duplicate elements. The returned
        /// wrapper raises a <see cref="NotSupportedException"/> whenever the user attempts 
        /// to add an element that is already contained in the <b>QueryResultCollection</b>.
        /// </para><para>
        /// <strong>Note:</strong> The <b>Unique</b> wrapper reflects any changes made
        /// to the underlying <paramref name="collection"/>, including the possible
        /// creation of duplicate elements. The uniqueness of all elements is therefore
        /// no longer assured if the underlying collection is manipulated directly.
        /// </para></remarks>
        public static QueryResultCollection Unique(QueryResultCollection collection)
        {
            if (collection == null)
                throw new ArgumentNullException("collection");

            for (int i = collection.Count - 1; i > 0; i--)
                if (collection.IndexOf(collection[i]) < i)
                    throw new ArgumentException("collection",
                        "Argument cannot contain duplicate elements.");

            return new UniqueList(collection);
        }
        /// <summary>
        /// Returns a synchronized (thread-safe) wrapper
        /// for the specified <see cref="QueryResultCollection"/>.
        /// </summary>
        /// <param name="collection">The <see cref="QueryResultCollection"/> to synchronize.</param>
        /// <returns>
        /// A synchronized (thread-safe) wrapper around <paramref name="collection"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="collection"/> is a null reference.</exception>
        /// <remarks>Please refer to <see cref="ArrayList.Synchronized"/> for details.</remarks>
        public static QueryResultCollection Synchronized(QueryResultCollection collection)
        {
            if (collection == null)
                throw new ArgumentNullException("collection");

            return new SyncList(collection);
        }
        /// <summary>
        /// Returns a read-only wrapper for the specified <see cref="QueryResultCollection"/>.
        /// </summary>
        /// <param name="collection">The <see cref="QueryResultCollection"/> to wrap.</param>
        /// <returns>A read-only wrapper around <paramref name="collection"/>.</returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="collection"/> is a null reference.</exception>
        /// <remarks>Please refer to <see cref="ArrayList.ReadOnly"/> for details.</remarks>
        public static QueryResultCollection ReadOnly(QueryResultCollection collection)
        {
            if (collection == null)
                throw new ArgumentNullException("collection");

            return new ReadOnlyList(collection);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryResultCollection"/> class
        /// that contains elements copied from the specified collection and
        /// that has the same initial capacity as the number of elements copied.
        /// </summary>
        /// <param name="collection">The <see cref="QueryResultCollection"/>
        /// whose elements are copied to the new collection.</param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="collection"/> is a null reference.</exception>
        /// <remarks>Please refer to <see cref="ArrayList(ICollection)"/> for details.</remarks>
        public QueryResultCollection(QueryResultCollection collection)
        {
            if (collection == null)
                throw new ArgumentNullException("collection");

            this._array = new QueryResult[collection.Count];
            AddRange(collection);
        }
            public override void AddRange(QueryResultCollection collection)
            {
                foreach (QueryResult value in collection)
                    CheckUnique(value);

                this._collection.AddRange(collection);
            }
 internal UniqueList(QueryResultCollection collection)
     : base(Tag.Default)
 {
     this._collection = collection;
 }
 public override void AddRange(QueryResultCollection collection)
 {
     lock (this._root) this._collection.AddRange(collection);
 }
 internal SyncList(QueryResultCollection collection)
     : base(Tag.Default)
 {
     this._root = collection.SyncRoot;
     this._collection = collection;
 }
 public override void AddRange(QueryResultCollection collection)
 {
     throw new NotSupportedException(
         "Read-only collections cannot be modified.");
 }
 internal ReadOnlyList(QueryResultCollection collection)
     : base(Tag.Default)
 {
     this._collection = collection;
 }
 internal Enumerator(QueryResultCollection collection)
 {
     this._collection = collection;
     this._version = collection._version;
     this._index = -1;
 }