Explorar el Código

Support title and description for videos

Zed hace 6 años
padre
commit
371a2473bc
Se han modificado 6 ficheros con 26 adiciones y 5 borrados
  1. 6 0
      src/cache.nim
  2. 7 4
      src/parserutils.nim
  3. 1 0
      src/sass/tweet/card.scss
  4. 1 0
      src/sass/tweet/video.scss
  5. 2 0
      src/types.nim
  6. 9 1
      src/views/tweet.nim

+ 6 - 0
src/cache.nim

@@ -3,6 +3,10 @@ import norm/sqlite
 
 import types, api/profile
 
+template safeAddColumn(field: typedesc): untyped =
+  try: field.addColumn
+  except DbError: discard
+
 dbFromTypes("cache.db", "", "", "", [Profile, Video])
 
 withDb:
@@ -10,6 +14,8 @@ withDb:
     createTables()
   except DbError:
     discard
+  Video.title.safeAddColumn
+  Video.description.safeAddColumn
 
 var profileCacheTime = initDuration(minutes=10)
 

+ 7 - 4
src/parserutils.nim

@@ -202,11 +202,14 @@ proc getTweetMedia*(tweet: Tweet; node: XmlNode) =
   if "gif" in player.attr("class"):
     tweet.gif = some getGif(player.select(".PlayableMedia-player"))
   elif "video" in player.attr("class"):
-    let thumb = player.selectAttr(".PlayableMedia-player", "style").split("'")
+    let
+      thumb = player.selectAttr(".PlayableMedia-player", "style").split("'")
+      desc = player.selectText(".PlayableMedia-description")
+      title = player.selectText(".PlayableMedia-title")
+    var video = Video(title: title, description: desc)
     if thumb.len > 1:
-      tweet.video = some Video(thumb: thumb[^2])
-    else:
-      tweet.video = some Video()
+      video.thumb = thumb[^2]
+    tweet.video = some video
 
 proc getQuoteMedia*(quote: var Quote; node: XmlNode) =
   if node.select(".QuoteTweet--sensitive") != nil:

+ 1 - 0
src/sass/tweet/card.scss

@@ -15,6 +15,7 @@
     overflow: hidden;
     color: inherit;
     display: flex;
+    flex-direction: column;
     text-decoration: none !important;
 
     &:hover {

+ 1 - 0
src/sass/tweet/video.scss

@@ -13,6 +13,7 @@ video {
 
 .video-container {
     max-height: 530px;
+    margin: 0;
 
     img {
         height: 100%;

+ 2 - 0
src/types.nim

@@ -44,6 +44,8 @@ dbTypes:
       views*: string
       available*: bool
       reason*: string
+      title*: string
+      description*: string
       playbackType* {.
           dbType: "STRING"
           parseIt: parseEnum[VideoType](it.s)

+ 9 - 1
src/views/tweet.nim

@@ -76,8 +76,11 @@ proc renderVideoUnavailable(video: Video): VNode =
         p: text "This media is unavailable"
 
 proc renderVideo(video: Video; prefs: Prefs; path: string): VNode =
+  let container =
+    if video.description.len > 0 or video.title.len > 0: " card-container"
+    else: ""
   buildHtml(tdiv(class="attachments")):
-    tdiv(class="gallery-video"):
+    tdiv(class="gallery-video" & container):
       tdiv(class="attachment video-container"):
         let thumb = getPicUrl(video.thumb)
         if not video.available:
@@ -99,6 +102,11 @@ proc renderVideo(video: Video; prefs: Prefs; path: string): VNode =
             verbatim "<div class=\"video-overlay\" onclick=\"playVideo(this)\">"
             verbatim "<div class=\"overlay-circle\">"
             verbatim "<span class=\"overlay-triangle\"</span></div></div>"
+      if container.len > 0:
+        tdiv(class="card-content"):
+          h2(class="card-title"): text video.title
+          if video.description.len > 0:
+            p(class="card-description"): text video.description
 
 proc renderGif(gif: Gif; prefs: Prefs): VNode =
   buildHtml(tdiv(class="attachments media-gif")):