diff --git a/src/parser.nim b/src/parser.nim index eb9c5bf..417a4fb 100644 --- a/src/parser.nim +++ b/src/parser.nim @@ -328,7 +328,7 @@ proc parseThread(js: JsonNode; global: GlobalObjects): tuple[thread: Chain, self else: result.thread.more = -1 else: - var tweet = finalizeTweet(global, entry.getId) + var tweet = finalizeTweet(global, t.getEntryId) if not tweet.available: tweet.tombstone = getTombstone(content{"tombstone"}) result.thread.content.add tweet @@ -343,8 +343,8 @@ proc parseConversation*(js: JsonNode; tweetId: string): Conversation = for e in instructions[0]{"addEntries", "entries"}: let entry = e{"entryId"}.getStr - if "tweet" in entry: - let tweet = finalizeTweet(global, entry.getId) + if "tweet" in entry or "tombstone" in entry: + let tweet = finalizeTweet(global, e.getEntryId) if $tweet.id != tweetId: result.before.content.add tweet else: @@ -408,8 +408,8 @@ proc parseTimeline*(js: JsonNode; after=""): Timeline = for e in instructions[0]{"addEntries", "entries"}: let entry = e{"entryId"}.getStr - if "tweet" in entry or "sq-I-t" in entry: - let tweet = finalizeTweet(global, entry.getId) + if "tweet" in entry or "sq-I-t" in entry or "tombstone" in entry: + let tweet = finalizeTweet(global, e.getEntryId) if not tweet.available: continue result.content.add tweet elif "cursor-top" in entry: diff --git a/src/parserutils.nim b/src/parserutils.nim index d0e8bce..d8ac8f2 100644 --- a/src/parserutils.nim +++ b/src/parserutils.nim @@ -55,6 +55,18 @@ proc getId*(js: JsonNode): int64 {.inline.} = of JInt: return js.getBiggestInt() else: return 0 +proc getEntryId*(js: JsonNode): string {.inline.} = + let entry = js{"entryId"}.getStr + if entry.len == 0: return + + if "tweet" in entry: + return entry.getId + elif "tombstone" in entry: + return js{"content", "item", "content", "tombstone", "tweet", "id"}.getStr + else: + echo "unknown entry: ", entry + return + template getStrVal*(js: JsonNode; default=""): string = js{"string_value"}.getStr(default)