User profile images and banner images => extract to table. Add `is_downloaded` column. Add test for double-downloading a user, shouldn't change the write-times on these files
- some user information is available in a Spaces result. Right now we just render them as null users (handle = "", id = 0) if they're not fetched already
- if an unknown user (created to satisfy SQLite integrity check on user_id foreign key) has user details fetched, the "Join Date" and other zero-value fields should update with the new value
TODO apiv2-tombstones
- on Tweet Detail:
- tombstones in replies to the focused tweet
- on User Feed:
- tombstones (e.g, "Age restricted") that show up as top-level entries
- keep in mind that these might be retweets; the entry-id is the RetweetID, not the TweetID
- Entry type "TimelineReplaceEntries" that replaces the cursor in the timeline instead of the new timeline having a new one
- As first step, need helper function that returns the []Instruction element in a APIV2Response (not just the MainInstruction which is TimelineAddEntries)
- since different requests have different paths to the Instructions, e.g., Data.User.Result.Timeline.Timeline.Instructions vs Data.Home.HomeTimelineUrt.Instructions, etc