aboutsummaryrefslogtreecommitdiff
path: root/src/commands/view.rs
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2017-10-23 01:19:20 -0700
committeriximeow <me@iximeow.net>2017-10-23 01:19:20 -0700
commitc2608157f343ac16592e626536673b16849382ee (patch)
tree2d86c2251adb63778123f960487745d9eb4efbdf /src/commands/view.rs
parent5f3ebcf73f3df5f9993503b31d97b50f5f2901c0 (diff)
thingiemapoo grows a real display!
kind of. add DisplayInfo struct that eventually can be used for rendering to any particular interface. I care primarily about rendering to a CLI, so. to support this: many instances of rendering with println!() are moved to at least be orchestrated by display::paint, which will eventually become smart enough to handle a reserved area for state notifications from the client, and buffer input nicely, .... more code moved over to use TweetId instead of bare strings because DisplayInfo is currently a member on TwitterCache, any cases of writing to DisplayInfo also involve writing to TwitterCache, which means TwitterCache is mut like... everywhere. Also, invalid TweetId in IdConversions ends up logging, meaning anything calling that conversion requires a mut TwitterCache, by the above paragraph.
Diffstat (limited to 'src/commands/view.rs')
-rw-r--r--src/commands/view.rs33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/commands/view.rs b/src/commands/view.rs
index c14446a..e9b38ee 100644
--- a/src/commands/view.rs
+++ b/src/commands/view.rs
@@ -18,9 +18,10 @@ pub static VIEW: Command = Command {
fn view(line: String, tweeter: &mut tw::TwitterCache, _queryer: &mut Queryer) {
// TODO handle this unwrap
let inner_twid = u64::from_str(&line).unwrap();
- let twete = tweeter.retrieve_tweet(&TweetId::Bare(inner_twid)).unwrap();
- display::render_twete(&twete.id, tweeter);
- println!(" link: https://twitter.com/i/web/status/{}", twete.id);
+ let twete = tweeter.retrieve_tweet(&TweetId::Bare(inner_twid)).unwrap().clone();
+ tweeter.display_info.recv(display::Infos::Tweet(TweetId::Twitter(twete.id.to_owned())));
+// display::render_twete(&twete.id, tweeter);
+// println!(" link: https://twitter.com/i/web/status/{}", twete.id);
}
pub static VIEW_THREAD: Command = Command {
@@ -29,22 +30,20 @@ pub static VIEW_THREAD: Command = Command {
exec: view_tr
};
-fn view_tr(line: String, tweeter: &mut tw::TwitterCache, queryer: &mut Queryer) {
- // TODO handle this unwrap
+fn view_tr(line: String, mut tweeter: &mut tw::TwitterCache, queryer: &mut Queryer) {
+ let mut thread: Vec<TweetId> = Vec::new();
let inner_twid = u64::from_str(&line).unwrap();
- view_tr_inner(inner_twid, tweeter, queryer);
-}
-
-fn view_tr_inner(id: u64, mut tweeter: &mut tw::TwitterCache, queryer: &mut Queryer) {
- let twete: tw::tweet::Tweet = tweeter.retrieve_tweet(&TweetId::Bare(id)).unwrap().to_owned();
- if let Some(reply_id) = twete.reply_to_tweet.clone() {
- if let Some(reply_internal_id) = tweeter.fetch_tweet(&reply_id, queryer).map(|x| x.internal_id).map(|x| x.to_owned()) {
- view_tr_inner(reply_internal_id, tweeter, queryer);
- println!(" |");
- println!(" v");
- }
+ let curr_id = TweetId::Bare(inner_twid);
+ let mut maybe_next_id = tweeter.retrieve_tweet(&curr_id).and_then(|x| x.reply_to_tweet.to_owned());
+ thread.push(curr_id);
+ while let Some(next_id) = maybe_next_id {
+ let curr_id = TweetId::Twitter(next_id);
+ maybe_next_id = tweeter.retrieve_tweet(&curr_id).and_then(|x| x.reply_to_tweet.to_owned());
+ thread.push(curr_id);
}
- display::render_twete(&twete.id, tweeter);
+
+ tweeter.display_info.recv(display::Infos::Thread(thread));
+// display::render_twete(&twete.id, tweeter);
// println!("link: https://twitter.com/i/web/status/{}", twete.id);
}