Google Reader Unread Count in Gmail

By Thin Light Last update Mar 13, 2009 — Installed 757 times. Daily Installs: 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 3, 4, 1, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 2, 0, 1, 3, 0

There are 1 previous version of this script.

// ==UserScript==
// @name           Google Reader Unread Count in Gmail
// @description    Shows google reader unread count in Gmail nav bar.
// @namespace      http://thinlight.org/
// @include        https://mail.google.com/*
// @include        http://mail.google.com/*
// ==/UserScript==

var readerLink = null;
var timer = null;
var timeout = null;
var attemptCount = 0;
var interval = 480000;
var step = 60000;
var minInterval = 60000;
var maxInterval = 480000;

function checkUnreadCount() {
	GM_xmlhttpRequest({
		method: 'GET',
		url: 'https://www.google.com/reader/api/0/unread-count?all=true&output=xml',
		headers: {
			'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3',
			'Accept': 'text/xml',
		},
		onload: function(responseDetails) {
			var parser = new DOMParser();
			var dom = parser.parseFromString(responseDetails.responseText,
				"application/xml");
			var entries = dom.getElementsByTagName('string');
			var unread = false;
			for (var i = 0; i < entries.length; i++) {
				if (entries[i].textContent.indexOf('reading-list') > -1) {
					var count = entries[i].nextSibling.textContent;
					readerLink.innerHTML = '<strong>Reader (' + count + ')</strong>';
					unread = true;
					break;
				}
			}
			if (!unread) {
				readerLink.innerHTML = 'Reader';
			}
		}
	});
	if (interval < maxInterval) {
		interval += step;
	}

	timeout = setTimeout(checkUnreadCount, interval);
}

function initCount() {
	attemptCount += 1;
	if (attemptCount > 10) { // To stop the timers on "dumb" pages
		clearInterval(timer);
		return;
	}

	var gbar = document.getElementById('gbar');
	if (!gbar) {
		return;
	} else {
		var links = gbar.getElementsByTagName('a');
		for (var i = 0; i < links.length; i++) {
			if (links[i].innerHTML.indexOf('Reader') > -1) {
				readerLink = links[i];
				break;
			}
		}
		readerLink.addEventListener('click', function(e) {
			interval = minInterval;
			clearTimeout(timeout);
			setTimeout(checkUnreadCount, interval);
		}, false);
		checkUnreadCount();
		clearInterval(timer);
	}
}

window.addEventListener('load', function(e) {
	timer = setInterval(initCount, 3000);
}, false);