Advertisement
Guest User

skipintro.patch

a guest
Dec 1st, 2023
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.89 KB | Software | 0 0
  1. diff --git a/src/assets/css/videoosd.scss b/src/assets/css/videoosd.scss
  2. index c0ef57dd5..d6bf3e429 100644
  3. --- a/src/assets/css/videoosd.scss
  4. +++ b/src/assets/css/videoosd.scss
  5. @@ -375,3 +375,39 @@
  6. transform: rotate(-360deg);
  7. }
  8. }
  9. +
  10. +@media (hover:hover) and (pointer:fine) {
  11. + .skipIntro .paper-icon-button-light:hover:not(:disabled) {
  12. + color:black !important;
  13. + background-color:rgba(47,93,98,0) !important;
  14. + }
  15. +}
  16. +
  17. +.skipIntro {
  18. + padding: 0 1px;
  19. + position: absolute;
  20. + right: 10em;
  21. + bottom: 9em;
  22. + background-color:rgba(25, 25, 25, 0.66);
  23. + border: 1px solid;
  24. + border-radius: 0px;
  25. + display: inline-block;
  26. + cursor: pointer;
  27. + box-shadow: inset 0 0 0 0 #f9f9f9;
  28. + -webkit-transition: ease-out 0.4s;
  29. + -moz-transition: ease-out 0.4s;
  30. + transition: ease-out 0.4s;
  31. +}
  32. +
  33. +@media (max-width: 1080px) {
  34. + .skipIntro {
  35. + right: 10%;
  36. + }
  37. +}
  38. +
  39. +.skipIntro:hover {
  40. + box-shadow: inset 400px 0 0 0 #f9f9f9;
  41. + -webkit-transition: ease-in 1s;
  42. + -moz-transition: ease-in 1s;
  43. + transition: ease-in 1s;
  44. +}
  45. diff --git a/src/controllers/playback/video/index.html b/src/controllers/playback/video/index.html
  46. index c76a1714a..e789ea43d 100644
  47. --- a/src/controllers/playback/video/index.html
  48. +++ b/src/controllers/playback/video/index.html
  49. @@ -6,6 +6,12 @@
  50. </div>
  51. </div>
  52. <div class="upNextContainer hide"></div>
  53. + <div class="skipIntro hide">
  54. + <button is="paper-icon-button-light" class="btnSkipIntro paper-icon-button-light">
  55. + Skip Intro
  56. + <span class="material-icons skip_next"></span>
  57. + </button>
  58. + </div>
  59. <div class="videoOsdBottom videoOsdBottom-maincontrols">
  60. <div class="osdControls">
  61. <div class="osdTextContainer osdMainTextContainer">
  62. diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js
  63. index 40fbd61bb..65ba5ba30 100644
  64. --- a/src/controllers/playback/video/index.js
  65. +++ b/src/controllers/playback/video/index.js
  66. @@ -462,9 +462,36 @@ import { appRouter } from '../../../components/appRouter';
  67. updatePlaylist();
  68. enableStopOnBack(true);
  69. updatePlaybackRate(player);
  70. + getIntroTimestamps(state.NowPlayingItem);
  71. }
  72. }
  73.  
  74. + function getIntroTimestamps(item) {
  75. + const apiClient = ServerConnections.getApiClient(item);
  76. + const address = apiClient.serverAddress();
  77. +
  78. + const url = `${address}/Episode/${item.Id}/IntroTimestamps`;
  79. + const reqInit = {
  80. + headers: {
  81. + "Authorization": `MediaBrowser Token=${apiClient.accessToken()}`
  82. + }
  83. + };
  84. +
  85. + fetch(url, reqInit).then(r => {
  86. + if (!r.ok) {
  87. + return;
  88. + }
  89. +
  90. + return r.json();
  91. + }).then(intro => {
  92. + tvIntro = intro;
  93. + });
  94. + }
  95. +
  96. + function skipIntro() {
  97. + playbackManager.seekMs(tvIntro.IntroEnd * 1000);
  98. + }
  99. +
  100. function onPlayPauseStateChanged() {
  101. if (isEnabled) {
  102. updatePlayPauseState(this.paused());
  103. @@ -582,6 +609,22 @@ import { appRouter } from '../../../components/appRouter';
  104. const item = currentItem;
  105. refreshProgramInfoIfNeeded(player, item);
  106. showComingUpNextIfNeeded(player, item, currentTime, currentRuntimeTicks);
  107. +
  108. + // Check if an introduction sequence was detected for this item.
  109. + if (!tvIntro?.Valid) {
  110. + return;
  111. + }
  112. +
  113. + const seconds = playbackManager.currentTime(player) / 1000;
  114. + const skipIntro = document.querySelector(".skipIntro");
  115. +
  116. + // If the skip prompt should be shown, show it.
  117. + if (seconds >= tvIntro.ShowSkipPromptAt && seconds < tvIntro.HideSkipPromptAt) {
  118. + skipIntro.classList.remove("hide");
  119. + return;
  120. + }
  121. +
  122. + skipIntro.classList.add("hide");
  123. }
  124. }
  125. }
  126. @@ -1318,6 +1361,7 @@ import { appRouter } from '../../../components/appRouter';
  127. let programEndDateMs = 0;
  128. let playbackStartTimeTicks = 0;
  129. let subtitleSyncOverlay;
  130. + let tvIntro;
  131. const nowPlayingVolumeSlider = view.querySelector('.osdVolumeSlider');
  132. const nowPlayingVolumeSliderContainer = view.querySelector('.osdVolumeSliderContainer');
  133. const nowPlayingPositionSlider = view.querySelector('.osdPositionSlider');
  134. @@ -1467,6 +1511,11 @@ import { appRouter } from '../../../components/appRouter';
  135. let lastPointerDown = 0;
  136. /* eslint-disable-next-line compat/compat */
  137. dom.addEventListener(view, window.PointerEvent ? 'pointerdown' : 'click', function (e) {
  138. + // If the user clicked the skip intro button, don't pause the video. Fixes ConfusedPolarBear/intro-skipper#44.
  139. + if (dom.parentWithClass(e.target, ['btnSkipIntro'])) {
  140. + return;
  141. + }
  142. +
  143. if (dom.parentWithClass(e.target, ['videoOsdBottom', 'upNextContainer'])) {
  144. return void showOsd();
  145. }
  146. @@ -1594,6 +1643,7 @@ import { appRouter } from '../../../components/appRouter';
  147. });
  148. view.querySelector('.btnAudio').addEventListener('click', showAudioTrackSelection);
  149. view.querySelector('.btnSubtitles').addEventListener('click', showSubtitleTrackSelection);
  150. + view.querySelector('.btnSkipIntro').addEventListener('click', skipIntro);
  151.  
  152. // Register to SyncPlay playback events and show big animated icon
  153. const showIcon = (action) => {
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement