Some fixes

This commit is contained in:
Joris Bertomeu
2025-08-26 09:21:46 +02:00
parent ac0dc8286b
commit 1851ca9241
2 changed files with 389 additions and 383 deletions

View File

@@ -142,7 +142,7 @@
<i class="fas fa-server"></i> CrawlFlix Server <i class="fas fa-server"></i> CrawlFlix Server
</label> </label>
<input type="text" id="crawlFlixUrl" class="form-control" <input type="text" id="crawlFlixUrl" class="form-control"
placeholder="http://localhost:3000" value="http://localhost:3000"> placeholder="http://localhost:4200" value="http://localhost:4200">
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
@@ -237,7 +237,7 @@
<div class="col-12"> <div class="col-12">
<label for="crawlFlixUrlCK" class="form-label">CrawlFlix Server</label> <label for="crawlFlixUrlCK" class="form-label">CrawlFlix Server</label>
<input type="text" id="crawlFlixUrlCK" class="form-control form-control-sm" <input type="text" id="crawlFlixUrlCK" class="form-control form-control-sm"
placeholder="http://localhost:3000" value="http://localhost:3000"> placeholder="http://localhost:4200" value="http://localhost:4200">
</div> </div>
</div> </div>

View File

@@ -4,7 +4,7 @@ let requests = chrome.extension.getBackgroundPage().requests;
let pageURL = chrome.extension.getBackgroundPage().pageURL; let pageURL = chrome.extension.getBackgroundPage().pageURL;
let targetIds = chrome.extension.getBackgroundPage().targetIds; let targetIds = chrome.extension.getBackgroundPage().targetIds;
let clearkey = chrome.extension.getBackgroundPage().clearkey; let clearkey = chrome.extension.getBackgroundPage().clearkey;
let userInputs = {}; let userInputs = {}; // IMPORTANT: Cette variable était manquante!
// === WIDEVINE KEY EXTRACTION === // === WIDEVINE KEY EXTRACTION ===
class WidevineExtractor { class WidevineExtractor {
@@ -13,6 +13,11 @@ class WidevineExtractor {
const resultTextarea = document.getElementById('result'); const resultTextarea = document.getElementById('result');
try { try {
// Vérifier que userInputs.license est défini
if (userInputs.license === undefined || !requests[userInputs.license]) {
throw new Error('License not selected. Please wait for auto-selection or select manually.');
}
// UI feedback // UI feedback
UIHelpers.setLoadingState(guessButton, true); UIHelpers.setLoadingState(guessButton, true);
document.body.style.cursor = "wait"; document.body.style.cursor = "wait";
@@ -106,7 +111,6 @@ class WidevineExtractor {
} }
} }
// === SMART MPD SELECTOR ===
class SmartMPDSelector { class SmartMPDSelector {
static scoreAndRankMPDs(mpdUrls) { static scoreAndRankMPDs(mpdUrls) {
const scoredMPDs = mpdUrls.map(url => ({ const scoredMPDs = mpdUrls.map(url => ({
@@ -361,7 +365,7 @@ class MPDDetector {
class CrawlFlixIntegration { class CrawlFlixIntegration {
static async sendToCrawlFlix(isClearchey = false) { static async sendToCrawlFlix(isClearchey = false) {
const suffix = isClearchey ? 'CK' : ''; const suffix = isClearchey ? 'CK' : '';
const crawlFlixUrl = document.getElementById(`crawlFlixUrl${suffix}`).value || 'http://localhost:3000'; const crawlFlixUrl = document.getElementById(`crawlFlixUrl${suffix}`).value || 'http://localhost:4200';
const mpdUrl = document.getElementById(`mpdUrl${suffix}`).value; const mpdUrl = document.getElementById(`mpdUrl${suffix}`).value;
const resultTextarea = document.getElementById(isClearchey ? 'ckResult' : 'result'); const resultTextarea = document.getElementById(isClearchey ? 'ckResult' : 'result');
@@ -377,27 +381,22 @@ class CrawlFlixIntegration {
} }
try { try {
StatusManager.show('Processing MPD and sending to CrawlFlix...', 'info', suffix); StatusManager.show('Opening CrawlFlix with preloaded data...', 'info', suffix);
// Parse and validate keys // Parse et valide les clés pour information
const keys = this.parseKeys(resultTextarea.value); const keys = this.parseKeys(resultTextarea.value);
if (keys.length === 0) { if (keys.length === 0) {
StatusManager.show('No valid keys found in the format key:value', 'error', suffix); StatusManager.show('No valid keys found in the format key:value', 'error', suffix);
return; return;
} }
// Test CrawlFlix connection and process MPD // Ouvrir CrawlFlix directement avec les paramètres
const mpdData = await this.processMPD(crawlFlixUrl, mpdUrl);
// Create success message
const message = `✓ Successfully sent to CrawlFlix!
${keys.length} key(s) • ${mpdData.videoTracks.length} video track(s) • ${mpdData.audioTracks.length} audio track(s) • ${mpdData.subtitles.length} subtitle(s)`;
StatusManager.show(message, 'success', suffix);
// Open CrawlFlix with pre-filled data
this.openCrawlFlixTab(crawlFlixUrl, mpdUrl, resultTextarea.value); this.openCrawlFlixTab(crawlFlixUrl, mpdUrl, resultTextarea.value);
// Message de succès
const contentType = isClearchey ? 'ClearKey' : 'Widevine';
StatusManager.show(`${contentType} data sent to CrawlFlix! (${keys.length} keys, MPD URL)`, 'success', suffix);
} catch (error) { } catch (error) {
console.error('CrawlFlix send error:', error); console.error('CrawlFlix send error:', error);
StatusManager.show(`Failed to send: ${error.message}`, 'error', suffix); StatusManager.show(`Failed to send: ${error.message}`, 'error', suffix);
@@ -435,14 +434,18 @@ ${keys.length} key(s) • ${mpdData.videoTracks.length} video track(s) • ${mpd
} }
static openCrawlFlixTab(crawlFlixUrl, mpdUrl, keysText) { static openCrawlFlixTab(crawlFlixUrl, mpdUrl, keysText) {
// Encoder les données pour l'URL
const params = new URLSearchParams({ const params = new URLSearchParams({
mpdUrl: mpdUrl, mpdUrl: mpdUrl,
keys: keysText, keys: keysText,
source: 'widevine-plugin' autoLoad: 'true'
}); });
// Ouvrir CrawlFlix avec les paramètres pré-remplis
const crawlFlixTab = `${crawlFlixUrl}?${params.toString()}`; const crawlFlixTab = `${crawlFlixUrl}?${params.toString()}`;
chrome.tabs.create({ url: crawlFlixTab }); chrome.tabs.create({ url: crawlFlixTab });
console.log('Opening CrawlFlix with preloaded data:', crawlFlixTab);
} }
static copyKeys(resultTextareaId) { static copyKeys(resultTextareaId) {
@@ -558,7 +561,7 @@ class UIHelpers {
button.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>Extracting Keys...'; button.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>Extracting Keys...';
} else { } else {
button.disabled = false; button.disabled = false;
button.innerHTML = button.dataset.originalText || button.innerHTML; button.innerHTML = '<i class="fas fa-magic me-2"></i> Extract Widevine Keys';
} }
} }
@@ -684,16 +687,19 @@ if (clearkey) {
MPDDetector.updateDropdowns(); MPDDetector.updateDropdowns();
StatusManager.show('ClearKey content detected', 'success'); StatusManager.show('ClearKey content detected', 'success');
MPDDetector.updateBadgeFromPopup();
} else if (psshs.length) { } else if (psshs.length) {
// Widevine detected // Widevine detected
document.getElementById('noEME').style.display = 'none'; document.getElementById('noEME').style.display = 'none';
document.getElementById('home').style.display = 'block'; document.getElementById('home').style.display = 'block';
WidevineExtractor.autoSelect(); // IMPORTANT: Faire autoSelect avant d'initialiser les event listeners
WidevineExtractor.autoSelect().then(() => {
EventManager.init();
MPDDetector.updateDropdowns(); MPDDetector.updateDropdowns();
StatusManager.show('Widevine content detected', 'success'); StatusManager.show('Widevine content detected and configured', 'success');
MPDDetector.updateBadgeFromPopup(); });
// Auto-refresh MPD detection periodically // Auto-refresh MPD detection periodically
setInterval(() => { setInterval(() => {
MPDDetector.updateDropdowns(); MPDDetector.updateDropdowns();