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