
plugin.id = "cZiRATE";

plugin.init =
function init(glob)
{
    plugin.major = 0;
    plugin.minor = 1;
    plugin.version = plugin.major + "." + plugin.minor;
    plugin.description = "Share your currently playing track from iRATE Radio."
}

plugin.disable =
function disable()
{

    uncmdary = [
        {name: 'irate'},
    ]

    client.commandManager.removeCommands(uncmdary);

    display(plugin.id+' - plugin disabled');

    return true;
}

plugin.enable =
function enable()
{

    var cmdary =
    [
     ["irate", RDM_cZiRATE, CMD_NEED_CHAN, "[<extended>]"],
    ]

    client.commandManager.defineCommands(cmdary);

    display(plugin.id+' - plugin enabled');

    return true;
}

function RDM_cZiRATE(e)
{

  var listener = {
    finished : function(data){

var parser = new DOMParser();
var doc = parser.parseFromString(data,"text/xml");
var roottag = doc.documentElement;
if ((roottag.tagName == "parserError") ||
    (roottag.namespaceURI == "http://www.mozilla.org/newlayout/xml/parsererror.xml")){
  alert("Parsing Error!");
}
else
{
//      dispatch("me " + data);
var artist = roottag.getAttribute("artist");
var title = roottag.getAttribute("title");
var state = roottag.getAttribute("state");

 if (isNaN(state)) {
  state = "Status: " + state + ".";
 } else {
  state = "Rating: " + state + "/10.";
 }

if(e.extended)
{
var url = roottag.getAttribute("url");
var playcount = roottag.getAttribute("numtimes");
var lastplay = roottag.getAttribute("lastplayed");
dispatch("me is listening to: " + artist + " / " + title + ". " + state +
     " Last played " + lastplay + ", played " + playcount + " times in total." +
     " Download URL: " + url + ", more music at irateradio.com.");
}
else
{
dispatch("me is listening to: " + artist + " / " + title + ". " + state);
}


}
return 1;
    }
  }
readAllFromSocket("127.0.0.1",12473,
'<Command type="currenttrack" />','<Command type="disconnect" />',listener);
}

function readAllFromSocket(host,port,outputData1,outputData2,listener)
{
  try {
    var transportService =
      Components.classes["@mozilla.org/network/socket-transport-service;1"]
        .getService(Components.interfaces.nsISocketTransportService);
    var transport = transportService.createTransport(null,0,host,port,null);

    var outstream = transport.openOutputStream(0,0,0);
    outstream.write(outputData1,outputData1.length);

    var stream = transport.openInputStream(0,0,0);
    var instream = Components.classes["@mozilla.org/scriptableinputstream;1"]
      .createInstance(Components.interfaces.nsIScriptableInputStream);
    instream.init(stream);

    var dataListener = {
      data : "",
      onStartRequest: function(request, context){},
      onStopRequest: function(request, context, status){
        instream.close();
        outstream.close();
        transport.close(1);
        listener.finished(this.data);
      },
      onDataAvailable: function(request, context, inputStream, offset, count){
        this.data += instream.read(count);
        outstream.write(outputData2,outputData2.length);

      },
    };

    var pump = Components.
      classes["@mozilla.org/network/input-stream-pump;1"].
        createInstance(Components.interfaces.nsIInputStreamPump);
    pump.init(stream, -1, -1, 0, 0, false);
    pump.asyncRead(dataListener,null);
  } catch (ex){
    return ex;
  }
  return null;
}