git.fiddlerwoaroof.com
Raw Blame History
function getCurrentTabUrl() {
  var queryInfo = {active: true, currentWindow: true};
  var d = $.Deferred();

  chrome.tabs.query(queryInfo, function(tabs) {
    var tab = tabs[0];
    var url = tab.url;
    console.assert(typeof url == 'string', 'tab.url should be a string');
    d.resolve(url, tab.title);
  });
  return d;
}

function getStoredCreds() {
  var d = $.Deferred();
  chrome.storage.sync.get({
    username: '',
    password: ''
  }, function (items) {
    d.resolve(items.username, items.password);
  });
  return d;
}

function authenticateMarrow() {
  var d = $.Deferred();
  getStoredCreds().done(function (username, password) {
    if (username === '') {
      renderStatus('Fail :(');
      return;
    }
    var postData = {"username":username,"password":password};
    return $.ajax('http://marrow.elangley.org/api/user/login?ak=1', {
      data: JSON.stringify(postData),
      contentType: 'application/json',
      type: 'POST',
      dataType: 'json'
    }).done(function(r) { d.resolve(username, r.ak); });
  });
  return d;
}

function postURL(url, title, username, ak) {
  var urlObj = JSON.stringify({"url": url, "title": title, "username": username, "ak": ak});
  var addUrl = 'http://marrow.elangley.org/api/bones/add';
  return $.ajax(addUrl, {
    data: urlObj,
    contentType: 'application/json',
    type: 'POST',
    dataType: 'json'
  });
}

var commandHandlers = {
  share_page: function() {
    var notification = chrome.notifications.create('share', {
      type: "progress",
      title: "Add to Marrow",
      message: "Posting",
      iconUrl: "marrow_app_128px.png"
    });
    authenticateMarrow().done(function(username, ak) {
      getCurrentTabUrl().done(function(url, title) {
        chrome.notifications.update('share', {progress: 50, message: "Posting '"+title+"'"});
        postURL(url, title, username, ak)
        .done(function() {
          chrome.notifications.update('share', {progress: 100});
        });
      });
    });
  }
};

chrome.commands.onCommand.addListener(function(command) {
  console.log('Command:' + command);

  if (commandHandlers[command] !== undefined) {
    commandHandlers[command]();
  }
});