nitter/src/types.nim

238 lines
4.7 KiB
Nim
Raw Normal View History

2021-12-27 02:37:38 +01:00
# SPDX-License-Identifier: AGPL-3.0-only
2020-06-01 02:25:39 +02:00
import times, sequtils, options, tables
2019-09-08 13:01:20 +02:00
import prefs_impl
genPrefsType()
2019-08-06 19:02:38 +02:00
type
2021-01-07 22:31:29 +01:00
RateLimitError* = object of CatchableError
2021-12-28 05:02:28 +01:00
InternalError* = object of CatchableError
2021-01-07 22:31:29 +01:00
2020-06-01 02:25:39 +02:00
Token* = ref object
tok*: string
remaining*: int
reset*: Time
init*: Time
lastUse*: Time
2020-06-01 02:25:39 +02:00
Error* = enum
2020-06-01 09:45:38 +02:00
null = 0
noUserMatches = 17
2020-06-01 02:25:39 +02:00
protectedUser = 22
couldntAuth = 32
doesntExist = 34
2020-06-01 09:45:38 +02:00
userNotFound = 50
2020-06-01 02:25:39 +02:00
suspended = 63
rateLimited = 88
2020-06-01 02:25:39 +02:00
invalidToken = 89
listIdOrSlug = 112
forbidden = 200
badToken = 239
2020-06-01 02:25:39 +02:00
noCsrf = 353
Profile* = object
id*: string
username*: string
fullname*: string
lowername*: string
location*: string
website*: string
bio*: string
userpic*: string
banner*: string
following*: string
followers*: string
tweets*: string
likes*: string
media*: string
verified*: bool
protected*: bool
suspended*: bool
2021-12-20 03:11:12 +01:00
joinDate*: DateTime
2020-06-01 02:25:39 +02:00
2019-08-06 19:02:38 +02:00
VideoType* = enum
2020-06-01 02:25:39 +02:00
m3u8 = "application/x-mpegURL"
mp4 = "video/mp4"
vmap = "video/vmap"
2019-08-06 19:02:38 +02:00
2020-06-01 02:25:39 +02:00
VideoVariant* = object
videoType*: VideoType
url*: string
bitrate*: int
Video* = object
videoId*: string
durationMs*: int
url*: string
thumb*: string
views*: string
available*: bool
reason*: string
title*: string
description*: string
playbackType*: VideoType
variants*: seq[VideoVariant]
2019-09-08 12:22:52 +02:00
2019-07-11 19:22:23 +02:00
QueryKind* = enum
posts, replies, media, users, tweets, userList
Query* = object
2019-07-11 19:22:23 +02:00
kind*: QueryKind
2019-09-13 13:20:08 +02:00
text*: string
2019-07-04 11:55:19 +02:00
filters*: seq[string]
includes*: seq[string]
excludes*: seq[string]
2019-08-06 17:41:06 +02:00
fromUser*: seq[string]
2019-09-19 22:11:38 +02:00
since*: string
until*: string
2019-09-19 23:36:21 +02:00
near*: string
2019-07-04 11:55:19 +02:00
sep*: string
2019-06-24 05:14:14 +02:00
Gif* = object
url*: string
thumb*: string
2019-07-04 04:18:32 +02:00
GalleryPhoto* = object
url*: string
tweetId*: string
color*: string
2020-05-26 14:24:41 +02:00
PhotoRail* = seq[GalleryPhoto]
2019-06-29 14:11:23 +02:00
Poll* = object
options*: seq[string]
values*: seq[int]
2020-06-01 02:25:39 +02:00
votes*: int
2019-06-29 14:11:23 +02:00
leader*: int
2020-06-01 02:25:39 +02:00
status*: string
2019-06-29 14:11:23 +02:00
2019-07-11 19:22:23 +02:00
CardKind* = enum
amplify = "amplify"
2020-06-02 16:31:10 +02:00
app = "app"
appPlayer = "appplayer"
2020-06-01 02:25:39 +02:00
player = "player"
2019-07-15 16:03:01 +02:00
summary = "summary"
summaryLarge = "summary_large_image"
promoWebsite = "promo_website"
2020-06-03 02:42:26 +02:00
promoVideo = "promo_video_website"
2019-11-08 22:52:34 +01:00
promoVideoConvo = "promo_video_convo"
2020-06-01 04:19:21 +02:00
promoImageConvo = "promo_image_convo"
promoImageApp = "promo_image_app"
storeLink = "direct_store_link_app"
2019-07-15 16:03:01 +02:00
liveEvent = "live_event"
2020-06-01 02:25:39 +02:00
broadcast = "broadcast"
periscope = "periscope_broadcast"
unified = "unified_card"
moment = "moment"
messageMe = "message_me"
2020-06-10 16:13:40 +02:00
videoDirectMessage = "video_direct_message"
imageDirectMessage = "image_direct_message"
audiospace = "audiospace"
newsletterPublication = "newsletter_publication"
unknown
2019-07-11 19:22:23 +02:00
Card* = object
kind*: CardKind
id*: string
query*: string
url*: string
title*: string
dest*: string
text*: string
2020-06-01 02:25:39 +02:00
image*: string
2019-07-15 16:03:01 +02:00
video*: Option[Video]
2019-07-11 19:22:23 +02:00
2019-07-01 23:48:25 +02:00
TweetStats* = object
2020-05-26 14:24:41 +02:00
replies*: int
retweets*: int
likes*: int
quotes*: int
2019-07-01 23:48:25 +02:00
2019-06-24 05:14:14 +02:00
Tweet* = ref object
2019-12-10 00:39:12 +01:00
id*: int64
threadId*: int64
2020-06-01 02:25:39 +02:00
replyId*: int64
2019-06-20 16:16:20 +02:00
profile*: Profile
text*: string
2021-12-20 03:11:12 +01:00
time*: DateTime
reply*: seq[string]
2019-06-20 16:16:20 +02:00
pinned*: bool
hasThread*: bool
available*: bool
tombstone*: string
2019-12-21 05:44:58 +01:00
location*: string
2019-07-01 23:48:25 +02:00
stats*: TweetStats
2020-06-01 02:25:39 +02:00
retweet*: Option[Tweet]
2019-10-26 16:37:58 +02:00
attribution*: Option[Profile]
2019-12-21 05:07:50 +01:00
mediaTags*: seq[Profile]
2020-06-01 02:25:39 +02:00
quote*: Option[Tweet]
2019-07-11 19:22:23 +02:00
card*: Option[Card]
2020-06-01 02:25:39 +02:00
poll*: Option[Poll]
2019-06-24 05:14:14 +02:00
gif*: Option[Gif]
video*: Option[Video]
photos*: seq[string]
2019-06-20 16:16:20 +02:00
2020-06-01 02:25:39 +02:00
Result*[T] = object
content*: seq[T]
2020-06-01 02:25:39 +02:00
top*, bottom*: string
beginning*: bool
query*: Query
2020-06-01 02:25:39 +02:00
Chain* = object
2019-08-23 02:15:25 +02:00
content*: seq[Tweet]
2019-12-10 00:39:12 +01:00
more*: int64
2020-06-01 02:25:39 +02:00
cursor*: string
2019-06-20 16:16:20 +02:00
2019-06-24 05:14:14 +02:00
Conversation* = ref object
2019-06-20 16:16:20 +02:00
tweet*: Tweet
before*: Chain
after*: Chain
replies*: Result[Chain]
2019-06-20 16:16:20 +02:00
2019-08-23 02:15:25 +02:00
Timeline* = Result[Tweet]
2020-06-01 02:25:39 +02:00
List* = object
id*: string
name*: string
userId*: string
username*: string
description*: string
members*: int
banner*: string
GlobalObjects* = ref object
tweets*: Table[string, Tweet]
users*: Table[string, Profile]
2019-07-31 02:15:43 +02:00
Config* = ref object
address*: string
port*: int
useHttps*: bool
httpMaxConns*: int
title*: string
hostname*: string
2020-06-01 02:26:04 +02:00
staticDir*: string
hmacKey*: string
2020-06-09 15:04:38 +02:00
base64Media*: bool
2020-06-01 02:26:04 +02:00
minTokens*: int
2021-12-28 06:21:22 +01:00
enableRss*: bool
2022-01-05 19:08:08 +01:00
enableDebug*: bool
2021-09-30 18:03:07 +02:00
proxy*: string
proxyAuth*: string
2020-06-01 02:26:04 +02:00
rssCacheTime*: int
listCacheTime*: int
redisHost*: string
redisPort*: int
redisConns*: int
redisMaxConns*: int
redisPassword*: string
2019-07-31 02:15:43 +02:00
Rss* = object
feed*, cursor*: string
proc contains*(thread: Chain; tweet: Tweet): bool =
2019-08-23 02:15:25 +02:00
thread.content.anyIt(it.id == tweet.id)