Support title and description for videos
This commit is contained in:
		
							parent
							
								
									02b206078d
								
							
						
					
					
						commit
						371a2473bc
					
				| 
						 | 
				
			
			@ -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)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@
 | 
			
		|||
    overflow: hidden;
 | 
			
		||||
    color: inherit;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    text-decoration: none !important;
 | 
			
		||||
 | 
			
		||||
    &:hover {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@ video {
 | 
			
		|||
 | 
			
		||||
.video-container {
 | 
			
		||||
    max-height: 530px;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
 | 
			
		||||
    img {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,8 @@ dbTypes:
 | 
			
		|||
      views*: string
 | 
			
		||||
      available*: bool
 | 
			
		||||
      reason*: string
 | 
			
		||||
      title*: string
 | 
			
		||||
      description*: string
 | 
			
		||||
      playbackType* {.
 | 
			
		||||
          dbType: "STRING"
 | 
			
		||||
          parseIt: parseEnum[VideoType](it.s)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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")):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue