From 8a45afdd46985d9d2be2ed77254dec36906d1065 Mon Sep 17 00:00:00 2001 From: Zed Date: Mon, 19 Aug 2019 20:53:57 +0200 Subject: [PATCH] Support vmap/amplify video card --- public/css/style.css | 8 ++++++++ src/nitter.nim | 6 ++++++ src/views/tweet.nim | 27 +++++++++++++++++---------- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/public/css/style.css b/public/css/style.css index 003425c..aa33b0c 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -970,6 +970,14 @@ video, .video-container img { display: block; } +.card-content-container { + color: unset; +} + +.card-content-container:hover { + text-decoration: none; +} + .card-image-container { width: 98px; flex-shrink: 0; diff --git a/src/nitter.nim b/src/nitter.nim index 8059f1d..a97ba76 100644 --- a/src/nitter.nim +++ b/src/nitter.nim @@ -191,6 +191,12 @@ routes: let client = newAsyncHttpClient() var content = await client.getContent(url) + if ".vmap" in url: + var m: RegexMatch + discard content.find(re"""url="(.+.m3u8)"""", m) + url = decodeUrl(content[m.group(0)[0]]) + content = await client.getContent(url) + if ".m3u8" in url: content = proxifyVideo(content, prefs.proxyVideos) diff --git a/src/views/tweet.nim b/src/views/tweet.nim index 36ba9df..a73bd89 100644 --- a/src/views/tweet.nim +++ b/src/views/tweet.nim @@ -117,22 +117,29 @@ proc renderCardImage(card: Card): VNode = tdiv(class="card-overlay-circle"): span(class="card-overlay-triangle") +proc renderCardContent(card: Card): VNode = + buildHtml(tdiv(class="card-content")): + h2(class="card-title"): text card.title + p(class="card-description"): text card.text + span(class="card-destination"): text card.dest + proc renderCard(card: Card; prefs: Prefs): VNode = const largeCards = {summaryLarge, liveEvent, promoWebsite, promoVideo} let large = if card.kind in largeCards: " large" else: "" + let url = replaceUrl(card.url, prefs) buildHtml(tdiv(class=("card" & large))): - a(class="card-container", href=replaceUrl(card.url, prefs)): - if card.image.isSome: - renderCardImage(card) - elif card.video.isSome: + if card.video.isSome: + tdiv(class="card-container"): renderVideo(get(card.video), prefs) - - tdiv(class="card-content-container"): - tdiv(class="card-content"): - h2(class="card-title"): text card.title - p(class="card-description"): text card.text - span(class="card-destination"): text card.dest + a(class="card-content-container", href=url): + renderCardContent(card) + else: + a(class="card-container", href=url): + if card.image.isSome: + renderCardImage(card) + tdiv(class="card-content-container"): + renderCardContent(card) proc renderStats(stats: TweetStats): VNode = buildHtml(tdiv(class="tweet-stats")):