twixter

A twtxt command line client in Rust

git clone git://git.shimmy1996.com/twixter.git

timeline.rs (1378B)

    1 use clap::ArgMatches;
    2 use reqwest::Client;
    3 
    4 use std::collections::BinaryHeap;
    5 
    6 use crate::config::Config;
    7 use crate::entry::Entry;
    8 
    9 /// Print timeline from following.
   10 pub fn timeline(config: &Config, _subcommand: &ArgMatches) {
   11     // Store (post_time, nick, content).
   12     let mut all_tweets = BinaryHeap::<Entry>::new();
   13 
   14     // Pull and parse twtxt files from user and each followed source.
   15     for (nick, twturl) in config
   16         .following
   17         .iter()
   18         .chain(vec![(&config.nick, &config.twturl)].into_iter())
   19     {
   20         all_tweets.append(&mut parse_twtxt(twturl, nick));
   21     }
   22 
   23     // Print the most recent tweets.
   24     for _ in 0..config.limit_timeline {
   25         if let Some(tweet) = all_tweets.pop() {
   26             if config.use_abs_time {
   27                 println!("\n{}", tweet);
   28             } else {
   29                 println!("\n{:#}", tweet);
   30             }
   31         }
   32     }
   33 }
   34 
   35 /// Parses given twtxt url, returns a Vec of (post_time, content).
   36 fn parse_twtxt(twturl: &str, nick: &str) -> BinaryHeap<Entry> {
   37     let client = Client::new();
   38     let mut tweets = BinaryHeap::new();
   39 
   40     if let Ok(resp_text) = client.get(twturl).send().and_then(|mut resp| resp.text()) {
   41         for line in resp_text.lines() {
   42             if let Ok(parsed) = Entry::parse(line, Some(nick)) {
   43                 tweets.push(parsed);
   44             };
   45         }
   46     };
   47 
   48     tweets
   49 }