(function() { const config = { shortClass: '.short', posterClass: '.short-poster', lastWatchedPrefix: 'last_watched_episode', episodeProgressPrefix: 'episode_progress_' }; const style = document.createElement('style'); style.textContent = ` `; document.head.appendChild(style); function findSeriesProgress(href) { const cleanUrl = href.replace(/https?:\/\/[^\/]+/, '').split('?')[0]; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key && key.startsWith(config.lastWatchedPrefix)) { try { const data = localStorage.getItem(key); const watchedInfo = JSON.parse(data); if (watchedInfo && watchedInfo.page && watchedInfo.url && (watchedInfo.url.includes(cleanUrl) || cleanUrl.includes(watchedInfo.url))) { if (watchedInfo.episodeId) { const progressKey = config.episodeProgressPrefix + watchedInfo.page + '_' + watchedInfo.episodeId; const progressData = localStorage.getItem(progressKey); if (progressData) { const progress = JSON.parse(progressData); if (progress && typeof progress.percentage === 'number') { return progress.percentage; } } return 5; } } } catch (e) { } } } const pageId = cleanUrl.replace(/[^a-zA-Z0-9]/g, '_'); for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key && key.includes(pageId) && (key.startsWith(config.lastWatchedPrefix) || key.startsWith(config.episodeProgressPrefix))) { if (key.startsWith(config.lastWatchedPrefix)) { try { const watchedData = JSON.parse(localStorage.getItem(key)); if (watchedData && watchedData.episodeId) { const progressKey = config.episodeProgressPrefix + pageId + '_' + watchedData.episodeId; const progressData = localStorage.getItem(progressKey); if (progressData) { const progress = JSON.parse(progressData); if (progress && progress.percentage) { return progress.percentage; } } return 5; } } catch (e) { } } if (key.startsWith(config.episodeProgressPrefix)) { try { const progressData = localStorage.getItem(key); const progress = JSON.parse(progressData); if (progress && progress.percentage) { return progress.percentage; } } catch (e) { } } } } return 0; } function addProgressBars() { const shorts = document.querySelectorAll(config.shortClass); shorts.forEach(short => { const poster = short.querySelector(config.posterClass); if (!poster) return; const href = poster.getAttribute('href'); if (!href) return; if (!href.includes("/serie-") && !href.includes("/s-tv/")) return; const percentage = findSeriesProgress(href); if (percentage > 0) { if (!poster.querySelector('.video-progress-container')) { const progressContainer = document.createElement('div'); progressContainer.className = 'video-progress-container'; const progressFilled = document.createElement('div'); progressFilled.className = 'progress-filled'; progressFilled.style.width = percentage + '%'; progressContainer.appendChild(progressFilled); poster.appendChild(progressContainer); } } }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', addProgressBars); } else { addProgressBars(); } setTimeout(addProgressBars, 500); })();