types.nim 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import times, sequtils, options
  2. import norm/sqlite
  3. export sqlite, options
  4. type
  5. VideoType* = enum
  6. vmap, m3u8, mp4
  7. db("cache.db", "", "", ""):
  8. type
  9. Profile* = object
  10. username*: string
  11. fullname*: string
  12. location*: string
  13. website*: string
  14. bio*: string
  15. userpic*: string
  16. banner*: string
  17. following*: string
  18. followers*: string
  19. tweets*: string
  20. likes*: string
  21. media*: string
  22. verified* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  23. protected* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  24. joinDate* {.
  25. dbType: "INTEGER"
  26. parseIt: it.i.fromUnix()
  27. formatIt: it.toUnix()
  28. .}: Time
  29. updated* {.
  30. dbType: "INTEGER"
  31. parseIt: it.i.fromUnix()
  32. formatIt: getTime().toUnix()
  33. .}: Time
  34. Video* = object
  35. videoId*: string
  36. contentId*: string
  37. durationMs*: int
  38. url*: string
  39. thumb*: string
  40. views*: string
  41. playbackType* {.
  42. dbType: "STRING",
  43. parseIt: parseEnum[VideoType](it.s),
  44. formatIt: $it,
  45. .}: VideoType
  46. available* {.dbType: "STRING", parseIt: parseBool(it.s) formatIt: $it.}: bool
  47. Prefs* = object
  48. videoPlayback* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  49. autoplayGifs* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  50. hideTweetStats* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  51. hideBanner* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  52. stickyProfile* {.dbType: "STRING", parseIt: parseBool(it.s), formatIt: $it.}: bool
  53. type
  54. QueryKind* = enum
  55. replies, media, multi, custom = "search"
  56. Query* = object
  57. kind*: QueryKind
  58. filters*: seq[string]
  59. includes*: seq[string]
  60. excludes*: seq[string]
  61. fromUser*: seq[string]
  62. sep*: string
  63. Gif* = object
  64. url*: string
  65. thumb*: string
  66. GalleryPhoto* = object
  67. url*: string
  68. tweetId*: string
  69. color*: string
  70. Poll* = object
  71. options*: seq[string]
  72. values*: seq[int]
  73. votes*: string
  74. status*: string
  75. leader*: int
  76. CardKind* = enum
  77. summary = "summary"
  78. summaryLarge = "summary_large_image"
  79. promoWebsite = "promo_website"
  80. promoVideo = "promo_video_website"
  81. player = "player"
  82. liveEvent = "live_event"
  83. Card* = object
  84. kind*: CardKind
  85. id*: string
  86. query*: string
  87. url*: string
  88. title*: string
  89. dest*: string
  90. text*: string
  91. image*: Option[string]
  92. video*: Option[Video]
  93. Quote* = object
  94. id*: string
  95. profile*: Profile
  96. text*: string
  97. reply*: seq[string]
  98. hasThread*: bool
  99. sensitive*: bool
  100. available*: bool
  101. thumb*: string
  102. badge*: string
  103. Retweet* = object
  104. by*: string
  105. id*: string
  106. TweetStats* = object
  107. replies*: string
  108. retweets*: string
  109. likes*: string
  110. Tweet* = ref object
  111. id*: string
  112. threadId*: string
  113. profile*: Profile
  114. text*: string
  115. time*: Time
  116. shortTime*: string
  117. reply*: seq[string]
  118. pinned*: bool
  119. available*: bool
  120. hasThread*: bool
  121. stats*: TweetStats
  122. retweet*: Option[Retweet]
  123. quote*: Option[Quote]
  124. card*: Option[Card]
  125. gif*: Option[Gif]
  126. video*: Option[Video]
  127. photos*: seq[string]
  128. poll*: Option[Poll]
  129. Thread* = ref object
  130. tweets*: seq[Tweet]
  131. more*: int
  132. Conversation* = ref object
  133. tweet*: Tweet
  134. before*: Thread
  135. after*: Thread
  136. replies*: seq[Thread]
  137. Timeline* = ref object
  138. tweets*: seq[Tweet]
  139. minId*: string
  140. maxId*: string
  141. hasMore*: bool
  142. beginning*: bool
  143. query*: Option[Query]
  144. Config* = ref object
  145. address*: string
  146. port*: int
  147. title*: string
  148. staticDir*: string
  149. cacheDir*: string
  150. profileCacheTime*: int
  151. proc contains*(thread: Thread; tweet: Tweet): bool =
  152. thread.tweets.anyIt(it.id == tweet.id)