WebExtension as alternative to Chromecast
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
3.9 KiB

7 years ago
  1. console.log("muffcast server v0.1");
  2. var player;
  3. var loaded = function() {
  4. if (document.readyState === 'complete') {
  5. setTimeout(function() {
  6. browser.runtime.sendMessage("loaded");
  7. }, 500);
  8. }
  9. }
  10. loaded();
  11. document.onreadystatechange = function() {
  12. loaded();
  13. }
  14. var getPlayer = function(message) {
  15. return new Promise(function(resolve, reject) {
  16. var host = window.location.hostname;
  17. switch (host) {
  18. case "www.zdf.de":
  19. setTimeout(function() {
  20. document.getElementsByClassName("zdfplayer-start-icon")[0].click();
  21. resolve(document.getElementsByTagName(message.type)[message.index]);
  22. }, 500)
  23. break;
  24. default:
  25. resolve(document.getElementsByTagName(message.type)[message.index]);
  26. }
  27. })
  28. }
  29. browser.runtime.onMessage.addListener(function(message) {
  30. console.log("client", message);
  31. switch (message.command) {
  32. case "status":
  33. var status = {
  34. "api": "muffcast - server v0.1",
  35. "running": false
  36. }
  37. if (player) {
  38. status.running = true;
  39. status.paused = player.paused;
  40. status.playing = !player.paused;
  41. status.currentTime = player.currentTime;
  42. status.volume = player.volume;
  43. status.muted = player.muted;
  44. status.duration = player.duration;
  45. status.index = player.index;
  46. status.type = player.tagName;
  47. status.url = encodeURIComponent(window.location.href);
  48. status.host = encodeURIComponent(window.location.hostname);
  49. status.title = document.title;
  50. }
  51. browser.runtime.sendMessage(status);
  52. break;
  53. case "load":
  54. if (message.index >= 0) {
  55. getPlayer(message).then(function(response) {
  56. player = response;
  57. if (player) {
  58. player.currentTime = message.seek;
  59. player.volume = message.volume;
  60. player.muted = message.muted;
  61. player.play();
  62. player.index = message.index;
  63. player.loaded = false;
  64. player.addEventListener("canplay", function(event) {
  65. if (!player.loaded) {
  66. browser.runtime.sendMessage("ok");
  67. player.loaded = true;
  68. }
  69. })
  70. // DEBUG TIMEOUT FOR FOCUS
  71. setTimeout(function() {
  72. if (player.requestFullscreen) {
  73. player.requestFullscreen();
  74. } else if (player.mozRequestFullScreen) {
  75. player.mozRequestFullScreen();
  76. } else if (player.webkitRequestFullScreen) {
  77. player.webkitRequestFullScreen();
  78. } else if (player.msRequestFullscreen) {
  79. player.msRequestFullscreen();
  80. }
  81. }, 3000);
  82. } else {
  83. browser.runtime.sendMessage("no player found for given index");
  84. }
  85. });
  86. } else {
  87. browser.runtime.sendMessage("no index specified");
  88. }
  89. break;
  90. case "play":
  91. if (player) {
  92. if (message.seek) {
  93. player.currentTime = message.seek;
  94. }
  95. player.play();
  96. browser.runtime.sendMessage("ok");
  97. } else {
  98. browser.runtime.sendMessage("no player loaded");
  99. }
  100. break;
  101. case "pause":
  102. if (player) {
  103. if (message.seek) {
  104. player.currentTime = message.seek;
  105. }
  106. player.pause();
  107. browser.runtime.sendMessage("ok");
  108. } else {
  109. browser.runtime.sendMessage("no player loaded");
  110. }
  111. break;
  112. case "seek":
  113. if (player) {
  114. if (message.seek) {
  115. player.currentTime = message.seek;
  116. browser.runtime.sendMessage("ok");
  117. } else {
  118. browser.runtime.sendMessage("no seek specified");
  119. }
  120. } else {
  121. browser.runtime.sendMessage("no player loaded");
  122. }
  123. break;
  124. case "volume":
  125. if (player) {
  126. if (message.volume) {
  127. player.volume = message.volume;
  128. browser.runtime.sendMessage("ok");
  129. } else {
  130. browser.runtime.sendMessage("no volume specified");
  131. }
  132. } else {
  133. browser.runtime.sendMessage("no player loaded");
  134. }
  135. break;
  136. case "mute":
  137. if (player) {
  138. player.muted = message.muted;
  139. browser.runtime.sendMessage("ok");
  140. } else {
  141. browser.runtime.sendMessage("no player loaded");
  142. }
  143. break;
  144. default:
  145. browser.runtime.sendMessage("unknown command");
  146. break;
  147. }
  148. })