twixter

A twtxt command line client in Rust

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

main.rs (2540B)

    1 use clap::{crate_version, App, Arg, SubCommand};
    2 
    3 use std::path::Path;
    4 
    5 mod config;
    6 mod entry;
    7 mod follow;
    8 mod timeline;
    9 mod tweet;
   10 use crate::config::Config;
   11 
   12 fn main() {
   13     let command = App::new("twixter")
   14         .version(crate_version!())
   15         .about("A client for twtxt, microblog for hackers")
   16         .arg(
   17             Arg::with_name("config_dir")
   18                 .short("c")
   19                 .long("config")
   20                 .value_name("PATH")
   21                 .help("Specifies a custom config file location")
   22                 .takes_value(true),
   23         )
   24         .subcommand(
   25             SubCommand::with_name("tweet")
   26                 .version(crate_version!())
   27                 .about("Append a new tweet to your twtxt file")
   28                 .arg(Arg::with_name("content").multiple(true)),
   29         )
   30         .subcommand(SubCommand::with_name("timeline").about("Retrieves your timeline"))
   31         .subcommand(
   32             SubCommand::with_name("follow")
   33                 .version(crate_version!())
   34                 .about("Adds a new source to your followings")
   35                 .arg(
   36                     Arg::with_name("nick")
   37                         .required(true)
   38                         .value_name("NICK")
   39                         .help("Specifies nickname to store source with"),
   40                 )
   41                 .arg(
   42                     Arg::with_name("url")
   43                         .required(true)
   44                         .value_name("URL")
   45                         .help("Specifies source url"),
   46                 ),
   47         )
   48         .get_matches();
   49 
   50     // Source config.
   51     let mut config_dir = command
   52         .args
   53         .get("config_dir")
   54         .and_then(|matched_arg| Some(Path::new(&matched_arg.vals[0]).to_path_buf()))
   55         .unwrap_or({
   56             let mut config_dir = dirs::config_dir().unwrap();
   57             config_dir.push("twixter");
   58             config_dir
   59         });
   60     config_dir.push("config");
   61 
   62     let config = Config::new(&config_dir);
   63 
   64     // Check if twtfile exists and create one if necessary.
   65     let twtfile_path = Path::new(&config.twtfile).parent().unwrap();
   66     if !twtfile_path.exists() {
   67         std::fs::create_dir_all(twtfile_path).unwrap();
   68     }
   69 
   70     // Parse subcommands.
   71     match command.subcommand() {
   72         ("tweet", Some(subcommand)) => tweet::tweet(&config, &subcommand),
   73         ("timeline", Some(subcommand)) => timeline::timeline(&config, &subcommand),
   74         ("follow", Some(subcommand)) => follow::follow(&config, &subcommand, &config_dir),
   75         _ => {}
   76     }
   77 }