add option to use collabora server

This commit is contained in:
makaveli10
2023-07-13 00:59:48 +05:30
parent 7accea1fdf
commit a634a6d6d3
10 changed files with 109 additions and 13 deletions
+3 -4
View File
@@ -1,4 +1,3 @@
console.log("Content script injected.");
let socket = null; let socket = null;
let isCapturing = false; let isCapturing = false;
let mediaStream = null; let mediaStream = null;
@@ -39,8 +38,8 @@ function resampleTo16kHZ(audioData, origSampleRate = 44100) {
return resampledData; return resampledData;
} }
function startRecording() { function startRecording(host, port) {
socket = new WebSocket("ws://localhost:9090/"); socket = new WebSocket(`ws://${host}:${port}/`);
socket.onopen = function(e) { socket.onopen = function(e) {
socket.send("handshake"); socket.send("handshake");
}; };
@@ -210,7 +209,7 @@ browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
const { action, data } = request; const { action, data } = request;
if (action === "startCapture") { if (action === "startCapture") {
isCapturing = true; isCapturing = true;
startRecording(); startRecording(data.host, data.port);
} else if (action === "stopCapture") { } else if (action === "stopCapture") {
isCapturing = false; isCapturing = false;
@@ -4,6 +4,7 @@
"version": "1.0", "version": "1.0",
"description": "Transcribe audio from any webpage.", "description": "Transcribe audio from any webpage.",
"permissions": [ "permissions": [
"storage",
"activeTab", "activeTab",
"<all_urls>" "<all_urls>"
], ],
+4
View File
@@ -11,5 +11,9 @@
<div class="button" id="startCapture">Start Capture</div> <div class="button" id="startCapture">Start Capture</div>
<div class="button" id="stopCapture" disabled>Stop Capture</div> <div class="button" id="stopCapture" disabled>Stop Capture</div>
</div> </div>
<div class="checkbox-container">
<input type="checkbox" id="useServerCheckbox">
<label for="useServerCheckbox">Use Collabora Whisper-Live Server</label>
</div>
</body> </body>
</html> </html>
+53 -3
View File
@@ -2,11 +2,49 @@ document.addEventListener("DOMContentLoaded", function() {
var startButton = document.getElementById("startCapture"); var startButton = document.getElementById("startCapture");
var stopButton = document.getElementById("stopCapture"); var stopButton = document.getElementById("stopCapture");
const useServerCheckbox = document.getElementById("useServerCheckbox");
browser.storage.local.get("capturingState")
.then(function(result) {
var capturingState = result.capturingState;
if (capturingState && capturingState.isCapturing) {
toggleCaptureButtons(true);
} else {
toggleCaptureButtons(false);
}
// Enable the startButton
startButton.disabled = false;
})
.catch(function(error) {
console.error("Error retrieving capturing state:", error);
// Enable the startButton
startButton.disabled = false;
});
browser.storage.local.get("useServerState", ({ useServerState }) => {
if (useServerState !== undefined) {
useServerCheckbox.checked = useServerState;
}
});
startButton.addEventListener("click", function() { startButton.addEventListener("click", function() {
let host = "localhost";
let port = "9090";
const useCollaboraServer = useServerCheckbox.checked;
if (useCollaboraServer){
host = "transcription.kurg.org"
port = "7090"
}
browser.tabs.query({ active: true, currentWindow: true }) browser.tabs.query({ active: true, currentWindow: true })
.then(function(tabs) { .then(function(tabs) {
browser.tabs.sendMessage(tabs[0].id, { action: "startCapture" }); browser.tabs.sendMessage(
tabs[0].id, { action: "startCapture", data: {host, port} });
toggleCaptureButtons(true); toggleCaptureButtons(true);
browser.storage.local.set({ capturingState: { isCapturing: true } })
.catch(function(error) {
console.error("Error storing capturing state:", error);
});
}) })
.catch(function(error) { .catch(function(error) {
console.error("Error sending startCapture message:", error); console.error("Error sending startCapture message:", error);
@@ -18,8 +56,11 @@ document.addEventListener("DOMContentLoaded", function() {
.then(function(tabs) { .then(function(tabs) {
browser.tabs.sendMessage(tabs[0].id, { action: "stopCapture" }) browser.tabs.sendMessage(tabs[0].id, { action: "stopCapture" })
.then(function(response) { .then(function(response) {
console.log(response);
toggleCaptureButtons(false); toggleCaptureButtons(false);
browser.storage.local.set({ capturingState: { isCapturing: false } })
.catch(function(error) {
console.error("Error storing capturing state:", error);
});
}) })
.catch(function(error) { .catch(function(error) {
console.error("Error sending stopCapture message:", error); console.error("Error sending stopCapture message:", error);
@@ -34,5 +75,14 @@ document.addEventListener("DOMContentLoaded", function() {
function toggleCaptureButtons(isCapturing) { function toggleCaptureButtons(isCapturing) {
startButton.disabled = isCapturing; startButton.disabled = isCapturing;
stopButton.disabled = !isCapturing; stopButton.disabled = !isCapturing;
useServerCheckbox.disabled = isCapturing; // Disable checkbox if capturing
startButton.classList.toggle("disabled", isCapturing);
stopButton.classList.toggle("disabled", !isCapturing);
} }
});
// Save the checkbox state when it's toggled
useServerCheckbox.addEventListener("change", () => {
const useServerState = useServerCheckbox.checked;
browser.storage.local.set({ useServerState });
});
});
+4
View File
@@ -101,3 +101,7 @@ label {
width: 30px; width: 30px;
text-align: center; text-align: center;
} }
.checkbox-container {
padding: 10px;
}
+4 -3
View File
@@ -129,7 +129,8 @@ async function getTab(tabId) {
* @param {number} tabId - The ID of the tab to start capturing. * @param {number} tabId - The ID of the tab to start capturing.
* @returns {Promise<void>} - A Promise that resolves when the capture process is started successfully. * @returns {Promise<void>} - A Promise that resolves when the capture process is started successfully.
*/ */
async function startCapture(tabId) { async function startCapture(options) {
const { tabId } = options;
const optionTabId = await getLocalStorageValue("optionTabId"); const optionTabId = await getLocalStorageValue("optionTabId");
if (optionTabId) { if (optionTabId) {
await removeChromeTab(optionTabId); await removeChromeTab(optionTabId);
@@ -149,7 +150,7 @@ async function startCapture(tabId) {
await sendMessageToTab(optionTab.id, { await sendMessageToTab(optionTab.id, {
type: "start_capture", type: "start_capture",
data: { currentTabId: currentTab.id }, data: { currentTabId: currentTab.id, host: options.host, port: options.port },
}); });
} else { } else {
console.log("No Audio"); console.log("No Audio");
@@ -184,7 +185,7 @@ async function stopCapture() {
*/ */
chrome.runtime.onMessage.addListener((message) => { chrome.runtime.onMessage.addListener((message) => {
if (message.action === "startCapture") { if (message.action === "startCapture") {
startCapture(message.tabId); startCapture(message);
} else if (message.action === "stopCapture") { } else if (message.action === "stopCapture") {
stopCapture(); stopCapture();
} }
+1 -1
View File
@@ -80,7 +80,7 @@ async function startRecord(option) {
window.close(); window.close();
}; };
const socket = new WebSocket("ws://localhost:9090/"); const socket = new WebSocket(`ws://${option.host}:${option.port}/`);
let isServerReady = false; let isServerReady = false;
socket.onopen = function(e) { socket.onopen = function(e) {
socket.send("handshake"); socket.send("handshake");
+4
View File
@@ -11,5 +11,9 @@
<div class="button" id="startCapture">Start Capture</div> <div class="button" id="startCapture">Start Capture</div>
<div class="button" id="stopCapture" disabled>Stop Capture</div> <div class="button" id="stopCapture" disabled>Stop Capture</div>
</div> </div>
<div class="checkbox-container">
<input type="checkbox" id="useServerCheckbox">
<label for="useServerCheckbox">Use Collabora Whisper-Live Server</label>
</div>
</body> </body>
</html> </html>
+31 -2
View File
@@ -3,6 +3,8 @@ document.addEventListener("DOMContentLoaded", function () {
const startButton = document.getElementById("startCapture"); const startButton = document.getElementById("startCapture");
const stopButton = document.getElementById("stopCapture"); const stopButton = document.getElementById("stopCapture");
const useServerCheckbox = document.getElementById("useServerCheckbox");
// Add click event listeners to the buttons // Add click event listeners to the buttons
startButton.addEventListener("click", startCapture); startButton.addEventListener("click", startCapture);
stopButton.addEventListener("click", stopCapture); stopButton.addEventListener("click", stopCapture);
@@ -16,6 +18,13 @@ document.addEventListener("DOMContentLoaded", function () {
} }
}); });
// Retrieve checkbox state from storage on popup open
chrome.storage.local.get("useServerState", ({ useServerState }) => {
if (useServerState !== undefined) {
useServerCheckbox.checked = useServerState;
}
});
// Function to handle the start capture button click event // Function to handle the start capture button click event
async function startCapture() { async function startCapture() {
// Ignore click if the button is disabled // Ignore click if the button is disabled
@@ -27,7 +36,20 @@ document.addEventListener("DOMContentLoaded", function () {
const currentTab = await getCurrentTab(); const currentTab = await getCurrentTab();
// Send a message to the background script to start capturing // Send a message to the background script to start capturing
chrome.runtime.sendMessage({ action: "startCapture", tabId: currentTab.id }, () => { let host = "localhost";
let port = "9090";
const useCollaboraServer = useServerCheckbox.checked;
if (useCollaboraServer){
host = "transcription.kurg.org"
port = "7090"
}
chrome.runtime.sendMessage(
{
action: "startCapture",
tabId: currentTab.id,
host: host,
port: port }, () => {
// Update capturing state in storage and toggle the buttons // Update capturing state in storage and toggle the buttons
chrome.storage.local.set({ capturingState: { isCapturing: true } }, () => { chrome.storage.local.set({ capturingState: { isCapturing: true } }, () => {
toggleCaptureButtons(true); toggleCaptureButtons(true);
@@ -64,7 +86,14 @@ document.addEventListener("DOMContentLoaded", function () {
function toggleCaptureButtons(isCapturing) { function toggleCaptureButtons(isCapturing) {
startButton.disabled = isCapturing; startButton.disabled = isCapturing;
stopButton.disabled = !isCapturing; stopButton.disabled = !isCapturing;
useServerCheckbox.disabled = isCapturing;
startButton.classList.toggle("disabled", isCapturing); startButton.classList.toggle("disabled", isCapturing);
stopButton.classList.toggle("disabled", !isCapturing); stopButton.classList.toggle("disabled", !isCapturing);
} }
});
// Save the checkbox state when it's toggled
useServerCheckbox.addEventListener("change", () => {
const useServerState = useServerCheckbox.checked;
chrome.storage.local.set({ useServerState });
});
});
+4
View File
@@ -101,3 +101,7 @@ label {
width: 30px; width: 30px;
text-align: center; text-align: center;
} }
.checkbox-container {
padding: 10px;
}