Guanacast Alert

March 1st, 2010

Guanacast Alert é um plugin para Firefox, que muito com provavelmente não vai mudar o mundo, mas me ajuda a não ter que acessar o site do Guanabara a cada cinco minutos, para ver se já tem uma nova edição desse fantástico podcast. Também é uma forma de presentear a galera do Guanacast que de longe são os melhores quando o assunto é podcast de tecnologia.

O plugin tem como licença GNU então fique a vontade para alterar, redistribuir e me dar dicas. Para baixar direto do site da Mozilla clique aqui.

Screenshots

Screen 1 Screen 2

Fonte

Para quem é mais geek nada como ter o código fonte (ignore os erros de português ;) ):

var guanacastalert = {
	// Chamado quando o Addon é carregado.
	onLoad: function() {

    		this.initialized = true;

		var conf = Components.classes['@mozilla.org/preferences-service;1'].getService().QueryInterface(Components.interfaces.nsIPrefBranch);

		var dataUltimaVerificacao = conf.getCharPref("extensions.guanacastalert.DataUltimaVerificacao");

		var dataHoje = new Date();

		//Se hoje não for domingo, então eu vamos fazer apenas uma verificação diária.
		if (dataHoje.getDay() != 0){
			//Se ainda não verificamos e existe um novo guanacast hoje.
			if (dataUltimaVerificacao != dataHoje.getDate() + '/' + dataHoje.getMonth() + '/' + dataHoje.getFullYear()){
				//Verificar a existencia de um novo guanacast daqui um minuto.
				setTimeout(this.verificarNovoGuanacastNoAr, 60000);
			}
		}else{ //Se hoje é domingo
			var  dataUltimoGuanacast = conf.getCharPref("extensions.guanacastalert.DataUltimoGuanacast");

			//Se ainda não temos conhecimento de nenhum guanacast hoje.
			if (dataHoje != new Date(dataUltimoGuanacast)){ 

				//Verificar se já saiu o guanacast daqui um minuto.
				setTimeout(this.verificarNovoGuanacastNoAr, 60000);

				//Verificar se já saiu o guanacast a cada 40 minutos.
				var intevalVerificacao = setInterval(this.verificarNovoGuanacastNoAr, 2400000);
			}
		}
	},

	// Faz a verificação da existência de um novo guanacast.
	verificarNovoGuanacastNoAr: function() {
			var conf = Components.classes['@mozilla.org/preferences-service;1'].getService()
				.QueryInterface(Components.interfaces.nsIPrefBranch);

			var  nomeUltimoGuanacast =  conf.getCharPref("extensions.guanacastalert.NomeUltimoGuanacast");

			var  dataUltimoGuanacast = conf.getCharPref("extensions.guanacastalert.DataUltimoGuanacast");

			var dataHoje = new Date();

			var retorno = false;

			//Se ainda não foi lançado nenhum novo guanacast.
			if (dataHoje != new Date(dataUltimoGuanacast)){ 

				var request = new XMLHttpRequest();
				request.open('GET', 'http://feeds.feedburner.com/guanacast?format=xml', false);
				request.send(null);  

				if(request.status == 200){
					var xml = request.responseXML;
					var nomeGuanacastAtual = xml.getElementsByTagName('title')[2].firstChild.data;
					var dataGuanacastAtual = new Date(xml.getElementsByTagName('pubDate')[0].firstChild.data);
					var linkGuanacastAtual = xml.getElementsByTagName('link')[2].firstChild.data;

					//Se o guanacast consultado é diferente do que tinhamos conhecimento.
					if (dataUltimoGuanacast  != dataGuanacastAtual.getDate() + '/' + dataGuanacastAtual.getMonth() + '/' + dataGuanacastAtual.getFullYear()){ //Se o nome do guanacast consultado for diferente do que tinhamos guardado anteriormente então significa que ele é um novo episodio!

						conf.setCharPref("extensions.guanacastalert.NomeUltimoGuanacast", nomeGuanacastAtual);
						conf.setCharPref("extensions.guanacastalert.DataUltimoGuanacast", dataGuanacastAtual.getDate() + '/' + dataGuanacastAtual.getMonth() + '/' + dataGuanacastAtual.getFullYear());
						conf.setCharPref("extensions.guanacastalert.LinkUltimoGuanacast", linkGuanacastAtual);
						retorno = true;
						window.open("chrome://guanacastalert/content/alertGuanacastNoAr.xul", "", "chrome");
					}
					conf.setCharPref("extensions.guanacastalert.DataUltimaVerificacao", dataHoje.getDate() + '/' + dataHoje.getMonth() + '/' + dataHoje.getFullYear());
				}
			}
			return retorno;
	},
	//Evento chamado ao clicar no icone na barra de statys
	openAlert: function() {
		var  dataUltimoGuanacast = Components.classes['@mozilla.org/preferences-service;1']
			.getService()
			.QueryInterface(Components.interfaces.nsIPrefBranch)
			.getCharPref("extensions.guanacastalert.DataUltimoGuanacast");

		var dataHoje = new Date();

		if (!this.verificarNovoGuanacastNoAr()){
			window.open("chrome://guanacastalert/content/alertAguardandoGuanacast.xul", "", "chrome");
		}
	},
};
window.addEventListener("load", function(e) { guanacastalert.onLoad(e); }, false);
Related Posts with Thumbnails

Leave a Reply