From aa48060630953faa3f5d100c3bf219967be488bd Mon Sep 17 00:00:00 2001 From: tvmon-dev Date: Wed, 15 Apr 2026 21:13:28 +0900 Subject: [PATCH] Fix: loading spinner until video plays, remove watched text from title --- .../tvmon/data/scraper/TvmonScraper.kt | 7 +++- .../tvmon/ui/playback/PlaybackActivity.kt | 32 ++++++++++++------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/tvmon-app/app/src/main/java/com/example/tvmon/data/scraper/TvmonScraper.kt b/tvmon-app/app/src/main/java/com/example/tvmon/data/scraper/TvmonScraper.kt index 4e35128..fa550ad 100644 --- a/tvmon-app/app/src/main/java/com/example/tvmon/data/scraper/TvmonScraper.kt +++ b/tvmon-app/app/src/main/java/com/example/tvmon/data/scraper/TvmonScraper.kt @@ -439,6 +439,11 @@ class TvmonScraper { continue } + val cleanLinkText = linkText + .replace("시청중", "") + .replace("NEW", "") + .trim() + val episodeNumMatch = Pattern.compile("(\\d+)\\s*화|(\\d+)\\s*회|EP\\.?(\\d+)|제\\s*(\\d+)\\s*부").matcher(linkText) val episodeTitle = if (episodeNumMatch.find()) { episodeNumMatch.group(1) ?: episodeNumMatch.group(2) ?: episodeNumMatch.group(3) ?: episodeNumMatch.group(4) @@ -471,7 +476,7 @@ class TvmonScraper { episodes.add(Episode( number = finalNumber, - title = linkText.ifBlank { finalNumber }, + title = cleanLinkText.ifBlank { finalNumber }, url = fullUrl, type = "webview", date = dateStr diff --git a/tvmon-app/app/src/main/java/com/example/tvmon/ui/playback/PlaybackActivity.kt b/tvmon-app/app/src/main/java/com/example/tvmon/ui/playback/PlaybackActivity.kt index 26d0883..b840c9f 100644 --- a/tvmon-app/app/src/main/java/com/example/tvmon/ui/playback/PlaybackActivity.kt +++ b/tvmon-app/app/src/main/java/com/example/tvmon/ui/playback/PlaybackActivity.kt @@ -272,6 +272,13 @@ class PlaybackActivity : AppCompatActivity() { return super.shouldInterceptRequest(view, request) } + override fun onPageStarted(view: WebView?, url: String?, favicon: android.graphics.Bitmap?) { + super.onPageStarted(view, url, favicon) + runOnUiThread { + loadingOverlay.visibility = View.VISIBLE + } + } + override fun onPageFinished(view: WebView?, url: String?) { super.onPageFinished(view, url) android.util.Log.i("PlaybackActivity", "Page finished: $url") @@ -291,16 +298,10 @@ class PlaybackActivity : AppCompatActivity() { android.util.Log.i("PlaybackActivity", "Enhanced AutoPlay script injected (second)") }, 2000) - handler.postDelayed({ - injectEnhancedAutoPlayScript() - android.util.Log.i("PlaybackActivity", "Enhanced AutoPlay script injected (third)") - }, 1500) - - handler.postDelayed({ - runOnUiThread { - loadingOverlay.visibility = View.GONE - } - }, 1500) + handler.postDelayed({ + injectEnhancedAutoPlayScript() + android.util.Log.i("PlaybackActivity", "Enhanced AutoPlay script injected (third)") + }, 1500) } } @@ -480,7 +481,9 @@ class PlaybackActivity : AppCompatActivity() { v.play().then(function() { console.log('AutoPlay: Video play() succeeded'); - if (window.Android) window.Android.onVideoPlay(); + if (window.Android) { + window.Android.onVideoPlay(); + } }).catch(function(e) { console.log('AutoPlay: Video play() failed: ' + e.message); }); @@ -495,6 +498,13 @@ class PlaybackActivity : AppCompatActivity() { console.log('AutoPlay: canplaythrough event fired'); tryPlay(v); }, {once: true}); + + v.addEventListener('playing', function() { + console.log('AutoPlay: Video is now playing'); + if (window.Android) { + window.Android.onVideoPlay(); + } + }, {once: true}); if (v.readyState >= 2) { tryPlay(v);