/*
 * GNOME_Media_CDDBSlave2.idl: IDL file for the CDDBSlave 2 interface
 *
 * Copyright (C) 2001 Ximian, Inc.
 *
 * Authors: Iain Holmes  <iain@ximian.com>
 */

#include <Bonobo.idl>

module GNOME {

module Media {

	/* As a note, I hate making this a seperate interface
	   but it seems that hiding and showing widgets inside
	   Bonobo::Control's is not a good thing.

	   Lots of love
	   Iain */
	interface CDDBTrackEditor : Bonobo::Unknown {
		void setDiscID (in string discid);
		
		void showWindow ();
	};
	
	interface CDDBSlave2 : Bonobo::Unknown {

		enum Result {
			OK,
			REQUEST_PENDING,
			ERROR_CONTACTING_SERVER,
			ERROR_RETRIEVING_DATA,
			MALFORMED_DATA,
			IO_ERROR
		};

		struct QueryResult {
			string discid;
			Result result;
		};

		struct TrackInfo {
			string name;
			short length;
			string comment;
		};
		typedef sequence<TrackInfo> TrackList;
		
		exception UnknownDiscID {};
		/**
		 * query: Queries the server for a CD
 		 * @discid: CDDB disc id.
		 * @ntrks:  Number of tracks on the cd.
		 * @offsets: A string of all the frame offsets of the starting
  		 *           location of each track, seperated by spaces.
		 * @nsecs: Total playing length of the CD in seconds.
		 * @name: Client name.
		 * @version: Client version.
		 *
		 * Sends a query to the server.
		 */
		void query(in string discid,
		           in short ntrks,
		   	   in string offsets,
		   	   in long nsecs,
		   	   in string name,
		   	   in string version);

		/**
		 * save: Writes a CDDB entry to disc.
		 */
		void save(in string discid)
			raises (UnknownDiscID);
		
		/**
		 * discid: CDDB disc id.
		 * 
		 * Returns the artist of @discid
		 */
		string getArtist (in string discid)
			raises (UnknownDiscID);
		void setArtist (in string discid,
				in string artist)
			raises (UnknownDiscID);

		/**
		 * discid: CDDB disc id.
		 */
		string getDiscTitle (in string discid)
			raises (UnknownDiscID);
		void setDiscTitle (in string discid,
				   in string disctitle)
			raises (UnknownDiscID);

		short getNTrks (in string discid)
			raises (UnknownDiscID);

		void getAllTracks (in string discid,
				   out TrackList names)
			raises (UnknownDiscID);
		void setAllTracks (in string discid,
				   in TrackList names)
			raises (UnknownDiscID);
				   
		string getComment (in string discid)
			raises (UnknownDiscID);
		void setComment (in string discid,
				 in string comment)
			raises (UnknownDiscID);
				 
		short getYear (in string discid)
			raises (UnknownDiscID);
		void setYear (in string discid,
			      in short year)
			raises (UnknownDiscID);
			      
		string getGenre (in string discid)
			raises (UnknownDiscID);
		void setGenre (in string discid,
			       in string genre)
			raises (UnknownDiscID);
	};
};
};  
