summaryrefslogtreecommitdiff
path: root/extensions/firefox/chrome/inject_on_load.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/firefox/chrome/inject_on_load.js')
-rw-r--r--extensions/firefox/chrome/inject_on_load.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/extensions/firefox/chrome/inject_on_load.js b/extensions/firefox/chrome/inject_on_load.js
new file mode 100644
index 0000000..faa4dbf
--- /dev/null
+++ b/extensions/firefox/chrome/inject_on_load.js
@@ -0,0 +1,149 @@
+(function() {
+ var isFocused = true;
+
+ function vkAudio__getLastInstanceId() {
+ var id = null, pp = ls.get('pad_playlist');
+ if (pp && pp.source) id = pp.source;
+ return id;
+ }
+ function vkAudio__getParams() {
+ var data = {};
+ try {
+ var havePlayer = window.audioPlayer !== undefined;
+ var havePlaylist = havePlayer && !!padAudioPlaylist();
+
+ data = {
+ havePlayer: havePlayer,
+ havePlaylist: havePlaylist,
+ isPlaying: havePlayer && window.audioPlayer.player && !window.audioPlayer.player.paused(),
+ instanceId: window.curNotifier && curNotifier.instance_id,
+ trackId: havePlayer && audioPlayer.id,
+ lastInstanceId: vkAudio__getLastInstanceId()
+ };
+ } catch(e) {}
+
+ return data;
+ }
+ function vkAudio__getPlayFirstId() {
+ var id = currentAudioId() || ls.get('audio_id') || (window.audioPlaylist && audioPlaylist.start);
+ return id || null;
+ }
+ function vkAudio__executeAfterPadLoading(f) {
+ Pads.show('mus');
+ window.onPlaylistLoaded = function() {
+ if (f) {
+ try {
+ f();
+ } catch(e) {}
+ }
+ setTimeout(function() {
+ Pads.show('mus');
+ }, 10);
+ }
+ }
+ function vkAudio__next() {
+ console.log("Next");
+ window.audioPlayer && audioPlayer.nextTrack(true, !window.audioPlaylist);
+ }
+ function vkAudio__prev() {
+ console.log("Prev");
+ window.audioPlayer && audioPlayer.prevTrack(true, !window.audioPlaylist);
+ }
+ function vkAudio__playPause() {
+ console.log("PlayPause");
+ if (!window.audioPlayer || !padAudioPlaylist()) {
+ stManager.add(['audioplayer.js'], function() {
+ vkAudio__executeAfterPadLoading(function() {
+ var plist = padAudioPlaylist(), id = vkAudio__getPlayFirstId();
+ if (id) {
+ playAudioNew(id);
+ } else if (plist && plist.start) {
+ playAudioNew(plist.start);
+ }
+ });
+ });
+ } else {
+ if (window.audioPlayer && audioPlayer.player) {
+ if (audioPlayer.player.paused()) {
+ audioPlayer.playTrack();
+ } else {
+ audioPlayer.pauseTrack();
+ }
+ }
+ }
+ }
+
+ function createCData(data) {
+ var docu = new DOMParser().parseFromString('<xml></xml>', "application/xml");
+ var cdata = docu.createCDATASection(data);
+ docu.getElementsByTagName('xml')[0].appendChild(cdata);
+ return cdata;
+ }
+ function sendMessage(json) {
+ // Fucking crazy.
+ json.bg = 1;
+
+ var cdata = createCData(JSON.stringify(json));
+ document.getElementById('utils').appendChild(cdata);
+
+ var evt = document.createEvent("Events");
+ evt.initEvent("VKPCInjectedMessage", true, false);
+ cdata.dispatchEvent(evt);
+ }
+ function remove() {
+ remove.parentNode.removeChild(remove);
+ }
+ function receiveCommand(e) {
+ var target = e.target, json = JSON.parse(target.data || "{}");
+
+ switch (json.cmd) {
+ case "getParams":
+ var params = vkAudio__getParams();
+ params.isFocused = isFocused;
+ sendMessage({
+ data: params,
+ cmd: "params",
+ id: json.id
+ });
+ break;
+
+ case "audioCommand":
+ switch (json.command) {
+ case "play":
+ case "pause":
+ vkAudio__playPause();
+ break;
+
+ case "next":
+ vkAudio__next();
+ break;
+
+ case "prev":
+ vkAudio__prev();
+ break;
+ }
+ break;
+ }
+
+ try {
+ _VKPC.remove(target);
+ } catch (e) {}
+ }
+
+ window.addEventListener("DOMContentLoaded", function(e) {
+ if (window.vk) {
+ document.addEventListener("VKPCBgMessage", receiveCommand, false);
+
+ sendMessage({
+ cmd: "register"
+ });
+ }
+ });
+
+ window.addEventListener("focus", function(e) {
+ isFocused = true;
+ }, false);
+ window.addEventListener("blur", function(e) {
+ isFocused = false
+ }, false);
+})();