cytube_set_page_title

残り時間とタイトルをタブに表示

  1. // ==UserScript==
  2. // @name cytube_set_page_title
  3. // @namespace https://cytube.xyz/
  4. // @version 1.7
  5. // @description 残り時間とタイトルをタブに表示
  6. // @author utubo
  7. // @match *://cytube.xyz/*
  8. // @match *://cytube.mm428.net/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (window.unsafeWindow || window).eval(` // ← チャンネルのjsにセットするときはこの行(と最後の行)を削除
  13. (function() {
  14. // Util
  15. // アップされた動画はPLAYER.mediaLengthとかPLAYER.getTimeが動かないCytubeのバグかな?
  16. // しょうがないので履歴に表示されてるmm:ssから終了時間を取得する(プレイリストはオフの場合がある)
  17. var getMediaLength = () => {
  18. var len = 0;
  19. var qeTime = document.getElementById('queue_history').getElementsByClassName('qe_time')[0];
  20. if (!qeTime) return 0;
  21. for (var a of qeTime.textContent.split(':')) {
  22. len = len * 60 + (a | 0);
  23. }
  24. return len;
  25. };
  26. // PLAYER.getTimeの代わりにPLAYER.player.currentTimeが使えるっぽい
  27. var getTime = () => new Promise(resolve => {
  28. if (PLAYER.player && PLAYER.player.currentTime) {
  29. resolve(PLAYER.player.currentTime());
  30. } else if (PLAYER.getTime) {
  31. PLAYER.getTime(resolve);
  32. } else {
  33. resolve(0);
  34. }
  35. });
  36. // ここからメイン
  37. var lastMediaId = '';
  38. var mediaTitle = '';
  39. var mediaLength = 0;
  40. var setPageTitle = async () => {
  41. if (lastMediaId != PLAYER.mediaId) {
  42. lastMediaId = PLAYER.mediaId;
  43. mediaTitle =
  44. document.getElementById('currenttitle')
  45. .textContent
  46. .replace(__('Currently Playing: '), '');
  47. mediaLength = (PLAYER.mediaLength || getMediaLength()); // 一応PLAYER.mediaLengthも見ておこ…
  48. }
  49. var time = await getTime();
  50. var rest = mediaLength - time;
  51. var mmss = (rest <= 0) ? '--:--' : ((rest / 60 | 0) + ':' + ('00' + (rest % 60 | 0)).slice(-2));
  52. var title = mmss + ' ' + mediaTitle + ' - ' + CHANNEL.opts.pagetitle;
  53. PAGETITLE = title;
  54. document.title = title;
  55. };
  56. clearInterval(window.GM_SET_PAGE_TITLE_TIMER);
  57. window.GM_SET_PAGE_TITLE_TIMER = setInterval(setPageTitle, 1000);
  58. })();
  59. `); // ← チャンネルのjsにセットするときはこの行も削除
  60.