mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2025-09-09 15:38:44 +00:00
update
This commit is contained in:
@@ -60,9 +60,9 @@ export class TorrentClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------
|
// --------------------------
|
||||||
// UPDATED: setupServiceWorker
|
// setupServiceWorker
|
||||||
// --------------------------
|
// --------------------------
|
||||||
async setupServiceWorker() {
|
async setupServiceWorker() {
|
||||||
try {
|
try {
|
||||||
const isBraveBrowser = await this.isBrave();
|
const isBraveBrowser = await this.isBrave();
|
||||||
|
|
||||||
@@ -77,9 +77,7 @@ export class TorrentClient {
|
|||||||
if (isBraveBrowser) {
|
if (isBraveBrowser) {
|
||||||
this.log("Checking Brave configuration...");
|
this.log("Checking Brave configuration...");
|
||||||
if (!navigator.serviceWorker) {
|
if (!navigator.serviceWorker) {
|
||||||
throw new Error(
|
throw new Error("Please enable Service Workers in Brave Shield settings");
|
||||||
"Please enable Service Workers in Brave Shield settings"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
|
if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
|
||||||
throw new Error("Please enable WebRTC in Brave Shield settings");
|
throw new Error("Please enable WebRTC in Brave Shield settings");
|
||||||
@@ -93,16 +91,12 @@ export class TorrentClient {
|
|||||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Directly register sw.min.js at /src/sw.min.js
|
// Register sw.min.js at the root (e.g. /sw.min.js) with scope = "/"
|
||||||
// with a scope that covers /src/ (which includes /src/webtorrent).
|
this.log("Registering service worker at /sw.min.js...");
|
||||||
this.log("Registering service worker at /src/sw.min.js...");
|
const registration = await navigator.serviceWorker.register("/sw.min.js", {
|
||||||
const registration = await navigator.serviceWorker.register(
|
scope: "/",
|
||||||
"/src/sw.min.js",
|
updateViaCache: "none",
|
||||||
{
|
});
|
||||||
scope: "/src/",
|
|
||||||
updateViaCache: "none",
|
|
||||||
}
|
|
||||||
);
|
|
||||||
this.log("Service worker registered");
|
this.log("Service worker registered");
|
||||||
|
|
||||||
if (registration.installing) {
|
if (registration.installing) {
|
||||||
@@ -128,7 +122,7 @@ export class TorrentClient {
|
|||||||
await this.waitForServiceWorkerActivation(registration);
|
await this.waitForServiceWorkerActivation(registration);
|
||||||
this.log("Service worker activated");
|
this.log("Service worker activated");
|
||||||
|
|
||||||
// Make sure the SW is fully ready
|
// Ensure the SW is fully ready
|
||||||
const readyRegistration = await Promise.race([
|
const readyRegistration = await Promise.race([
|
||||||
navigator.serviceWorker.ready,
|
navigator.serviceWorker.ready,
|
||||||
new Promise((_, reject) =>
|
new Promise((_, reject) =>
|
||||||
@@ -151,63 +145,6 @@ export class TorrentClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
formatBytes(bytes) {
|
|
||||||
if (bytes === 0) return "0 B";
|
|
||||||
const k = 1024;
|
|
||||||
const sizes = ["B", "KB", "MB", "GB"];
|
|
||||||
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
||||||
return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Streams the magnet to the <video> element.
|
|
||||||
* No stats intervals here—just returns the torrent object.
|
|
||||||
*/
|
|
||||||
async streamVideo(magnetURI, videoElement) {
|
|
||||||
try {
|
|
||||||
// 1) Setup service worker
|
|
||||||
const registration = await this.setupServiceWorker();
|
|
||||||
if (!registration || !registration.active) {
|
|
||||||
throw new Error("Service worker setup failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------
|
|
||||||
// UPDATED: Pass pathPrefix to createServer
|
|
||||||
// so that it uses /src/webtorrent/... for streaming
|
|
||||||
// ------------------------------------------------
|
|
||||||
this.client.createServer({
|
|
||||||
controller: registration,
|
|
||||||
pathPrefix: "/src/webtorrent",
|
|
||||||
});
|
|
||||||
this.log("WebTorrent server created");
|
|
||||||
|
|
||||||
const isFirefoxBrowser = this.isFirefox();
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (isFirefoxBrowser) {
|
|
||||||
this.log("Starting torrent download (Firefox path)");
|
|
||||||
this.client.add(
|
|
||||||
magnetURI,
|
|
||||||
{ strategy: "sequential", maxWebConns: 4 },
|
|
||||||
(torrent) => {
|
|
||||||
this.log("Torrent added (Firefox path):", torrent.name);
|
|
||||||
this.handleFirefoxTorrent(torrent, videoElement, resolve, reject);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.log("Starting torrent download (Chrome path)");
|
|
||||||
this.client.add(magnetURI, (torrent) => {
|
|
||||||
this.log("Torrent added (Chrome path):", torrent.name);
|
|
||||||
this.handleChromeTorrent(torrent, videoElement, resolve, reject);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
this.log("Failed to setup video streaming:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minimal handleChromeTorrent
|
// Minimal handleChromeTorrent
|
||||||
handleChromeTorrent(torrent, videoElement, resolve, reject) {
|
handleChromeTorrent(torrent, videoElement, resolve, reject) {
|
||||||
// OPTIONAL: Listen for “warning” events
|
// OPTIONAL: Listen for “warning” events
|
||||||
|
Reference in New Issue
Block a user