Google Reader Unread Count in Gmail

By Thin Light Last update Nov 20, 2011 — Installed 1,368 times.

There are 5 previous versions 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;

GM_addStyle('.reader-unread .gbts {font-weight:bold;color:#EEEEEE;}');

function checkUnreadCount() {
  GM_xmlhttpRequest({
      method: 'GET',
      url: 'https://www.google.com/reader/api/0/unread-count?all=true&output=xml',
      headers: {
        '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 = '<span class="gbtb2"></span><span class="gbts">Reader (' + count + ')</span>';
            readerLink.className += ' reader-unread';
            unread = true;
            break;
          }
        }
        if (!unread) {
          readerLink.innerHTML = '<span class="gbtb2"></span><span class="gbts">Reader</span>';
          readerLink.className = readerLink.className.replace(' reader-unread', '');
        }
      }
    });
  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('gbz') ||
    window.frames['canvas_frame'].contentDocument.getElementById('gbz'));
  if (!gbar) {
    return;
  } else {
    var links = gbar.getElementsByClassName('gbzt');
    var lastLink = null;
    for (var i = 0; i < links.length; i++) {
      lastLink = links[i];
      if (lastLink.innerHTML.indexOf('Reader') > -1) {
        readerLink = lastLink;
        break;
      }
    }

    if (! readerLink) {
      // reader link is hidden. swap it with lastLink
      readerLink = lastLink;
      links = gbar.getElementsByClassName('gbmt');
      for (var i = 0; i < links.length; i++) {
        if (links[i].innerHTML.indexOf('Reader') > -1) {
          // found
          var someLink = links[i];

          readerLink.innerHTML = '<span class="gbtb2"></span><span class="gbts">Reader</span>';
          someLink.innerHTML = readerLink.textContent;

          href = someLink.href;
          someLink.href = readerLink.href;
          readerLink.href = href;

          break;
        }
      }
    }

    if (readerLink) {
      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);