// Search.cs // // Copyright (C) 2008 Amr Hassan // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // using System; using System.Xml; using System.Collections.Generic; namespace Lastfm.Services { /// /// An abstract searching provider. /// public abstract class Search : Base { protected internal string prefix {get; set;} protected internal Dictionary searchTerms {get; set;} internal Search(string prefix, Session session) :base(session) { this.prefix = prefix; this.searchTerms = new Dictionary(); } internal override RequestParameters getParams () { RequestParameters p = new Lastfm.RequestParameters(); foreach(string key in searchTerms.Keys) p[key] = searchTerms[key]; return p; } /// /// Returne the total number of results. /// /// /// A /// public int GetResultCount() { return Int32.Parse(extract(request(prefix + ".search"), "opensearch:totalResults")); } /// /// Returns the number of items per page. /// /// /// A /// public int GetItemsPerPage() { return int.Parse(extract(request(prefix + ".search"), "opensearch:itemsPerPage")); } /// /// Returns a page of reuslts. /// /// /// A /// /// /// A /// public abstract T[] GetPage(int page); /// /// Specify how many items are returned in a page. /// /// /// A /// public void SpecifyItemsPerPage(int itemsPerPage) { this.searchTerms["limit"] = itemsPerPage.ToString(); } /// /// I'm Feeling Lucky. /// /// /// A /// public T GetFirstMatch() { return GetPage(1)[0]; } } }