Skip to content

Commit

Permalink
Replace generic API with Media Control API
Browse files Browse the repository at this point in the history
  • Loading branch information
feedbee committed May 1, 2015
1 parent a4e8fb3 commit 05c3342
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 47 deletions.
50 changes: 29 additions & 21 deletions extension/background.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,43 +13,51 @@
* limitations under the License.
*/

var activeTabs = [];
var registeredTabs = [];
var registerTab = function (tabId) {
if (registeredTabs.indexOf(tabId) == -1) {
registeredTabs.push(tabId);

chrome.pageAction.show(tabId);
chrome.pageAction.setTitle({
tabId: tabId,
title: 'Click to disable media keys for this tab'
});
}
};
var unregisterTab = function(tabId) {
var index = registeredTabs.indexOf(tabId);
if (index > -1) {
registeredTabs.splice(index, 1);
}
};

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

for (var i = 0; i < activeTabs.length; i++) {
chrome.tabs.sendMessage(activeTabs[i], {command: command});
for (var i = 0; i < registeredTabs.length; i++) {
chrome.tabs.sendMessage(registeredTabs[i], {command: command});
}
});

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log('Received tab message: ', request);
if (request.command == 'activateTab' && sender.tab) {
if (activeTabs.indexOf(sender.tab.id) == -1) {
activeTabs.push(sender.tab.id);
}
chrome.pageAction.show(sender.tab.id);
chrome.pageAction.setTitle({
tabId: sender.tab.id,
title: 'Click to disable media keys for this tab'
});

if (request.command == 'registerTab' && sender.tab) {
registerTab(sender.tab.id);
} else if (request.command == 'unregisterTab' && sender.tab) {
unregisterTab(sender.tab.id);
}
}
);

chrome.tabs.onRemoved.addListener(function onRemoved(tabId, removeInfo) {
var index = activeTabs.indexOf(tabId);
if (index > -1) {
activeTabs.splice(index, 1);
}
});
chrome.tabs.onRemoved.addListener(unregisterTab);

chrome.pageAction.onClicked.addListener(function(tab) {
var index = activeTabs.indexOf(tab.id);
var index = registeredTabs.indexOf(tab.id);
if (index < 0) {
activeTabs.push(tab.id);
registeredTabs.push(tab.id);
chrome.pageAction.setIcon({
tabId: tab.id,
path: {
Expand All @@ -62,7 +70,7 @@ chrome.pageAction.onClicked.addListener(function(tab) {
title: 'Click to disable media keys for this tab'
});
} else {
activeTabs.splice(index, 1);
registeredTabs.splice(index, 1);
chrome.pageAction.setIcon({
tabId: tab.id,
path: {
Expand Down
20 changes: 0 additions & 20 deletions extension/keysocket-generic-api.js

This file was deleted.

10 changes: 5 additions & 5 deletions extension/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Key Socket Media Keys",
"version": "0.6.2",
"version": "0.7.0",
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
Expand Down Expand Up @@ -58,6 +58,10 @@
}
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["media-control-api.js"]
},
{
"matches": ["http://www.thesixtyone.com/*"],
"js": ["shared.js","keysocket-t61.js"]
Expand Down Expand Up @@ -205,10 +209,6 @@
{
"matches": ["*://zvooq.ru/*"],
"js": ["shared.js", "keysocket-zvooq.js"]
},
{
"matches": ["http://relax-hub.com/"],
"js": ["shared.js", "keysocket-generic-api.js"]
}
]
}
44 changes: 44 additions & 0 deletions extension/media-control-api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// Tab registration by MediaControlled event
document.addEventListener("MediaControlled", function () {
chrome.runtime.sendMessage({command: "registerTab"});
});

// Tab unregistration by MediaUncontrolled event
document.addEventListener("MediaUncontrolled", function () {
chrome.runtime.sendMessage({command: "unregisterTab"});
});

// Media Events emmiter
chrome.runtime.onMessage.addListener(function(request) {
switch (request.command) {
case "play-pause":
document.dispatchEvent(new Event("MediaPlayPause"));
break;

case "stop":
document.dispatchEvent(new Event("MediaStop"));
break;

case "prev":
document.dispatchEvent(new Event("MediaPrev"));
break;

case "next":
document.dispatchEvent(new Event("MediaNext"));
break;
}
});

// Tell document that we are ready
console.log('Keysocket Media Control API initialized');
document.dispatchEvent(new Event("MediaControlApiInit"));

// Tab registration by meta tag
if (document.getElementsByName("media-controlled").length > 0) {
chrome.runtime.sendMessage({command: "registerTab"});
}

// Unregister tab before move to another URI
window.onunload = function() {
chrome.runtime.sendMessage({command: "unregisterTab"});
}
6 changes: 5 additions & 1 deletion extension/shared.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,8 @@ chrome.runtime.onMessage.addListener(
}
);

chrome.runtime.sendMessage({command: 'activateTab'});
chrome.runtime.sendMessage({command: 'registerTab'});

window.onunload = function() {
chrome.runtime.sendMessage({command: "unregisterTab"});
}

0 comments on commit 05c3342

Please sign in to comment.