-
Notifications
You must be signed in to change notification settings - Fork 0
/
popup.js
350 lines (302 loc) · 14.3 KB
/
popup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
document.addEventListener('DOMContentLoaded', function() {
// Asegúrate de que los elementos HTML estén presentes en popup.html
const increaseSpeedButton = document.getElementById('increaseSpeed');
const decreaseSpeedButton = document.getElementById('decreaseSpeed');
const resetSpeedButton = document.getElementById('resetSpeed');
const customSpeedInput = document.getElementById('customSpeed');
const setCustomSpeedButton = document.getElementById('setCustomSpeed');
const speedDisplay = document.getElementById('speedDisplay');
let originalPlaybackRate = 1.0; // Valor original de velocidad de reproducción
let playbackRate = originalPlaybackRate; // Inicializamos la velocidad de reproducción
// Función para actualizar y mostrar la velocidad actual
function updateSpeedDisplay() {
speedDisplay.textContent = playbackRate.toFixed(1) + 'x';
}
// Función para aplicar la velocidad de reproducción al elemento de video
function setVideoPlaybackRate(rate) {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.scripting.executeScript({
target: { tabId: tabs[0].id },
function: (rate) => {
let videoElement = document.querySelector('video');
if (videoElement) {
videoElement.playbackRate = rate;
}
},
args: [playbackRate] // Pasamos la velocidad de reproducción como argumento
});
});
}
document.addEventListener('DOMContentLoaded', function() {
// Aquí puedes usar setVideoPlaybackRate
});
// Ahora setVideoPlaybackRate es accesible desde aquí también
chrome.storage.sync.get(['customSpeed'], function(result) {
if (result.customSpeed) {
setVideoPlaybackRate(result.customSpeed);
}
});
// Función para resamplear el audio
function resampleAudio(audioContext, audioBuffer, rate) {
let audioSource = audioContext.createBufferSource();
audioSource.buffer = audioBuffer;
// Cambiar la velocidad de reproducción del audio
audioSource.playbackRate.value = rate;
return audioSource;
}
// Función para cambiar la velocidad del audio
function setAudioSpeed(speed) {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.scripting.executeScript({
target: { tabId: tabs[0].id },
function: (rate) => {
let audioContext = new (window.AudioContext || window.webkitAudioContext)();
let audioElement = document.querySelector('audio');
if (audioElement) {
fetch(audioElement.src)
.then(response => response.arrayBuffer())
.then(data => audioContext.decodeAudioData(data))
.then(audioBuffer => {
let resampledAudio = resampleAudio(audioContext, audioBuffer, rate);
resampledAudio.connect(audioContext.destination);
resampledAudio.start();
});
}
},
args: [speed] // Pasamos la velocidad de reproducción como argumento
});
});
}
// Añade un evento al botón de acelerar
increaseSpeedButton.addEventListener('click', function() {
playbackRate += 0.1; // Aumenta la velocidad en 0.1x
playbackRate = Math.min(playbackRate, 5.0); // Limita la velocidad máxima a 2.0x
updateSpeedDisplay(); // Actualiza la velocidad de reproducción en la interfaz
setVideoPlaybackRate();
setAudioSpeed(playbackRate); // Ajusta la velocidad del audio
});
// Añade un evento al botón de ralentizar
decreaseSpeedButton.addEventListener('click', function() {
playbackRate -= 0.1; // Reduce la velocidad en 0.1x
playbackRate = Math.max(playbackRate, 0.1); // Limita la velocidad mínima a 0.1x
updateSpeedDisplay(); // Actualiza la velocidad de reproducción en la interfaz
setVideoPlaybackRate();
setAudioSpeed(playbackRate); // Ajusta la velocidad del audio
});
// Añade un evento al botón de restablecer
resetSpeedButton.addEventListener('click', function() {
playbackRate = originalPlaybackRate; // Restablece la velocidad a su valor original
updateSpeedDisplay(); // Actualiza la velocidad de reproducción en la interfaz
setVideoPlaybackRate();
setAudioSpeed(playbackRate); // Ajusta la velocidad del audio
});
// Añade un evento al botón de establecer velocidad personalizada
setCustomSpeedButton.addEventListener('click', function() {
const customSpeed = parseFloat(customSpeedInput.value);
if (!isNaN(customSpeed) && customSpeed >= 0.1 && customSpeed <= 5.0) {
playbackRate = customSpeed; // Establece la velocidad personalizada
updateSpeedDisplay(); // Actualiza la velocidad de reproducción en la interfaz
setVideoPlaybackRate();
setAudioSpeed(playbackRate); // Ajusta la velocidad del audio
} else {
alert('Ingresa una velocidad personalizada válida entre 0.1x y 5.0x');
}
});
// Actualiza la velocidad de reproducción inicial en la interfaz
updateSpeedDisplay();
});
document.addEventListener('DOMContentLoaded', function() {
const increaseSpeedButton = document.getElementById('increaseSpeed');
const decreaseSpeedButton = document.getElementById('decreaseSpeed');
// Añade un evento al botón de acelerar
increaseSpeedButton.addEventListener('click', function() {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.scripting.executeScript({
target: { tabId: tabs[0].id },
function: () => {
// Intenta obtener el elemento de video
let videoElement = document.querySelector('video');
// Si no se encuentra un elemento de video, créalo y agréguelo al cuerpo del documento
if (!videoElement) {
videoElement = document.createElement('video');
document.body.appendChild(videoElement);
}
// Cambiar la velocidad de reproducción a 1.5x
videoElement.playbackRate = videoElement.playbackRate + 0.1;
}
});
});
});
// Añade un evento al botón de ralentizar
decreaseSpeedButton.addEventListener('click', function() {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.scripting.executeScript({
target: { tabId: tabs[0].id },
function: () => {
// Intenta obtener el elemento de video
let videoElement = document.querySelector('video');
// Si no se encuentra un elemento de video, créalo y agréguelo al cuerpo del documento
if (!videoElement) {
videoElement = document.createElement('video');
document.body.appendChild(videoElement);
}
// Cambiar la velocidad de reproducción a 0.5x
videoElement.playbackRate = videoElement.playbackRate - 0.1;
}
});
});
});
});
document.addEventListener('DOMContentLoaded', function() {
// Asegúrate de que los elementos HTML estén presentes en popup.html
const decreaseSpeedButton = document.getElementById('decreaseSpeed');
let originalPlaybackRate = 1.0; // Valor original de velocidad de reproducción
let playbackRate = originalPlaybackRate; // Inicializamos la velocidad de reproducción
// Función para aplicar la velocidad de reproducción al elemento de video
function setVideoPlaybackRate() {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.scripting.executeScript({
target: { tabId: tabs[0].id },
function: (rate) => {
let videoElement = document.querySelector('video');
if (videoElement) {
videoElement.playbackRate = rate;
}
},
args: [playbackRate] // Pasamos la velocidad de reproducción como argumento
});
});
}
// Función para cambiar la velocidad del audio
function setAudioSpeed(speed) {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.scripting.executeScript({
target: { tabId: tabs[0].id },
function: (rate) => {
let audioContext = new (window.AudioContext || window.webkitAudioContext)();
let audioElement = document.querySelector('audio');
if (audioElement) {
let source = audioContext.createMediaElementSource(audioElement);
let gainNode = audioContext.createGain();
source.connect(gainNode);
gainNode.connect(audioContext.destination);
gainNode.gain.value = rate;
}
},
args: [speed] // Pasamos la velocidad de reproducción como argumento
});
});
}
// Añade un evento al botón de ralentizar
decreaseSpeedButton.addEventListener('click', function() {
playbackRate -= 0.1; // Reduce la velocidad en 0.1x
setVideoPlaybackRate();
setAudioSpeed(playbackRate); // Ajusta la velocidad del audio
});
});
// Función para añadir los controles de velocidad al menú de configuraciones
function addSpeedControls() {
// Encuentra el menú de configuración por su clase
const settingsMenu = document.querySelector('.vmp-player-settings-menu');
if (settingsMenu) {
// Funciones para controlar la velocidad de reproducción
const videoElement = document.querySelector('video'); // Asegúrate de que este selector obtenga el video correcto
function increaseSpeed() {
if (videoElement) videoElement.playbackRate = Math.min(videoElement.playbackRate + 0.25, 2); // Limita a 2x
}
function decreaseSpeed() {
if (videoElement) videoElement.playbackRate = Math.max(videoElement.playbackRate - 0.25, 0.5); // Limita a 0.5x
}
function resetSpeed() {
if (videoElement) videoElement.playbackRate = 1;
}
// Crear y añadir botones al menú
function createMenuItem(text, handler) {
const menuItem = document.createElement('div');
menuItem.textContent = text;
menuItem.style.padding = '8px 16px'; // Asume que este es el estilo deseado
menuItem.style.cursor = 'pointer';
menuItem.addEventListener('click', handler);
return menuItem;
}
// Añadir botones de "Ralentizar", "Acelerar" y "Restablecer"
settingsMenu.appendChild(createMenuItem('Ralentizar', decreaseSpeed));
settingsMenu.appendChild(createMenuItem('Acelerar', increaseSpeed));
settingsMenu.appendChild(createMenuItem('Restablecer', resetSpeed));
}
}
// Asegúrate de llamar a esta función cuando el menú ya esté en el DOM
// Esto podría ser después de un evento como 'DOMContentLoaded' o un 'MutationObserver'
// si el menú se carga dinámicamente
addSpeedControls();
function addSpeedControls() {
// Encuentra el menú de configuraciones de Viki por su clase
const settingsMenu = document.querySelector('.vmp-player-settings-menu');
if (settingsMenu) {
// Funciones para controlar la velocidad de reproducción
const videoElement = document.querySelector('video'); // Asegúrate de que este selector obtenga el video correcto
function increaseSpeed() {
if (videoElement) videoElement.playbackRate = Math.min(videoElement.playbackRate + 0.25, 2); // Limita a 2x
}
function decreaseSpeed() {
if (videoElement) videoElement.playbackRate = Math.max(videoElement.playbackRate - 0.25, 0.5); // Limita a 0.5x
}
function resetSpeed() {
if (videoElement) videoElement.playbackRate = 1;
}
// Crear y añadir botones al menú
function createMenuItem(text, handler) {
const menuItem = document.createElement('div');
menuItem.textContent = text;
menuItem.classList.add('sc-hlLBRy', 'dCeuqH'); // Asume que estas son las clases de estilo para elementos de menú
menuItem.style.cursor = 'pointer';
menuItem.addEventListener('click', handler);
return menuItem;
}
// Añadir botones de "+ Acelerar", "- Ralentizar" y "Restablecer"
settingsMenu.appendChild(createMenuItem('+ Acelerar', increaseSpeed));
settingsMenu.appendChild(createMenuItem('- Ralentizar', decreaseSpeed));
settingsMenu.appendChild(createMenuItem('Restablecer', resetSpeed));
}
}
// Luego, debes asegurarte de ejecutar addSpeedControls cuando el menú esté disponible en el DOM.
// Puedes intentar ejecutarlo después de que se haya cargado el sitio o usar MutationObserver si el menú se carga dinámicamente.
// Para guardar la velocidad de reproducción
function savePlaybackRate(rate) {
chrome.storage.sync.set({ 'playbackRate': rate }, function() {
console.log('Playback rate saved: ' + rate);
});
}
// Para aplicar la velocidad de reproducción guardada cuando se carga un nuevo video
function applySavedPlaybackRate() {
chrome.storage.sync.get(['playbackRate'], function(result) {
if (result.playbackRate) {
const videoElement = document.querySelector('video');
if (videoElement) {
videoElement.playbackRate = result.playbackRate;
}
}
});
}
// Asegúrate de llamar a applySavedPlaybackRate cuando el documento esté listo o cuando se cargue un nuevo video
// Esta función puede ser llamada desde la interfaz de usuario de la extensión
function setCustomPlaybackRate(customRate) {
const videoElement = document.querySelector('video');
if (videoElement) {
videoElement.playbackRate = customRate;
savePlaybackRate(customRate); // Reutiliza la función de guardar la velocidad
}
}
// Necesitarás una interfaz de usuario donde los usuarios puedan ingresar su velocidad personalizada y una función que llame a setCustomPlaybackRate
let message = chrome.i18n.getMessage("Viki Speed Control");
// En tu script popup.js o en el script donde manejas la velocidad personalizada
document.getElementById('setCustomSpeed').addEventListener('click', function() {
const customSpeed = parseFloat(document.getElementById('customSpeed').value);
if (!isNaN(customSpeed) && customSpeed >= 0.1 && customSpeed <= 3.0) {
chrome.storage.sync.set({'customSpeed': customSpeed}, function() {
console.log('Custom speed saved: ' + customSpeed);
});
} else {
alert('Ingresa una velocidad personalizada válida entre 0.1x y 3.0x');
}
});