This commit is contained in:
Lizandro Guarnizo
2026-01-28 02:23:36 -05:00
parent 37d6bf1e20
commit 6ebf5c9a22
30 changed files with 2264 additions and 118 deletions
+23 -6
View File
@@ -37,6 +37,8 @@ function isValidMediaUrl(u) {
function ensureProxyUrl(u, download = false) {
if (!isValidMediaUrl(u)) return '';
if (u.startsWith('/') || u.indexOf('/api/version/media-url.php') === 0) return u;
// Si empieza con api/ agregar / al inicio
if (u.startsWith('api/')) return '/' + u;
try {
const parsed = new URL(u);
const host = parsed.host.toLowerCase();
@@ -84,7 +86,8 @@ function renderMediaMessage(msg) {
// Full URL for opening (prefer local file then external with id or url)
let fullUrl = '';
if (isValidMediaUrl(localFile)) {
fullUrl = `/api/version/media-url.php?local=${encodeURIComponent(localFile)}`;
// Usar archivo local directamente sin proxy
fullUrl = localFile.startsWith('/') ? localFile : `/${localFile}`;
} else if (isValidMediaUrl(mediaExternal)) {
let mid = '';
if (mediaExternal.indexOf('api/get_media.php?id=') !== -1) {
@@ -108,16 +111,28 @@ function renderMediaMessage(msg) {
return `<div class="text-muted"><em>Imagen no disponible</em></div>`;
}
case 'video': {
const src = ensureProxyUrl(effective || msg.media_url || '');
// Priorizar local_file sobre otras fuentes
let src = '';
if (isValidMediaUrl(localFile)) {
src = localFile.startsWith('/') ? localFile : `/${localFile}`;
} else {
src = ensureProxyUrl(effective || msg.media_url || '');
}
if (src) return `<div class="message-media"><video controls><source src="${escapeHtml(src)}" type="video/mp4">Tu navegador no soporta video.</video></div>${content?`<div>${escapeHtml(content)}</div>`:''}`;
return `<div class="text-muted"><em>Video no disponible</em></div>`;
}
case 'audio': {
const src = ensureProxyUrl(effective || msg.media_url || '');
// Priorizar local_file sobre otras fuentes
let src = '';
if (isValidMediaUrl(localFile)) {
src = localFile.startsWith('/') ? localFile : `/${localFile}`;
} else {
src = ensureProxyUrl(effective || msg.media_url || '');
}
if (!src) return `<div class="text-muted"><em>Audio no disponible</em></div>`;
// build download link when possible (api/get_media.php?id=... or direct url or local file)
let audioDownload = null;
const candidate = isValidMediaUrl(effective) ? effective : (isValidMediaUrl(msg.media_url) ? msg.media_url : (isValidMediaUrl(localFile) ? localFile : null));
const candidate = isValidMediaUrl(localFile) ? localFile : (isValidMediaUrl(effective) ? effective : (isValidMediaUrl(msg.media_url) ? msg.media_url : null));
if (candidate && candidate.indexOf && candidate.indexOf('api/get_media.php?id=') !== -1) {
const parts = candidate.split('id=');
const mid = parts[1] ? parts[1] : '';
@@ -125,7 +140,8 @@ function renderMediaMessage(msg) {
} else if (candidate && /^https?:\/\//i.test(candidate)) {
audioDownload = `/api/version/media-url.php?url=${encodeURIComponent(candidate)}&download=1`;
} else if (candidate && candidate === localFile) {
audioDownload = `/api/version/media-url.php?local=${encodeURIComponent(candidate)}&download=1`;
// Usar archivo local directamente sin proxy
audioDownload = localFile.startsWith('/') ? localFile : `/${localFile}`;
}
let html = `<div class="message-media"><audio controls><source src="${escapeHtml(src)}" type="audio/mpeg">Tu navegador no soporta audio.</audio></div>`;
@@ -143,7 +159,8 @@ function renderMediaMessage(msg) {
} else if (isValidMediaUrl(mediaExternal) && /^https?:\/\//i.test(mediaExternal)) {
docUrl = `/api/version/media-url.php?url=${encodeURIComponent(mediaExternal)}&download=1`;
} else if (isValidMediaUrl(localFile)) {
docUrl = `/api/version/media-url.php?local=${encodeURIComponent(localFile)}&download=1`;
// Usar archivo local directamente sin proxy
docUrl = localFile.startsWith('/') ? localFile : `/${localFile}`;
}
if (docUrl) return `<a href="${docUrl}" class="message-document" target="_blank" rel="noopener noreferrer"><i class="fas fa-file-pdf"></i><span>${escapeHtml(filename)}</span></a>`;
return `<div class="message-document" style="opacity:0.6;"><i class="fas fa-file-pdf"></i><span>${escapeHtml(filename)} (No disponible)</span></div>`;