Ver Fonte

Support vmap/amplify video card

Zed há 7 anos atrás
pai
commit
8a45afdd46
3 ficheiros alterados com 31 adições e 10 exclusões
  1. 8 0
      public/css/style.css
  2. 6 0
      src/nitter.nim
  3. 17 10
      src/views/tweet.nim

+ 8 - 0
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;

+ 6 - 0
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)
 

+ 17 - 10
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")):