You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.7 KiB
98 lines
2.7 KiB
#[macro_use]
|
|
extern crate log;
|
|
#[macro_use]
|
|
extern crate failure;
|
|
#[macro_use]
|
|
extern crate smart_default;
|
|
#[macro_use]
|
|
extern crate serde;
|
|
#[macro_use]
|
|
use elefren::{
|
|
helpers::cli,
|
|
prelude::*,
|
|
http_send::HttpSender,
|
|
};
|
|
|
|
use failure::Fallible;
|
|
use crate::bootstrap::Config;
|
|
use crate::store::Store;
|
|
|
|
mod bootstrap;
|
|
mod store;
|
|
|
|
type EleRegistratered = elefren::registration::Registered<HttpSender>;
|
|
|
|
/// Wrapper for the long tuple with Registration state
|
|
#[derive(Serialize,Deserialize,Debug)]
|
|
struct ElefrenRegistration {
|
|
parts: (String, String, String, String, Scopes, bool),
|
|
}
|
|
|
|
const KEY_OAUTH_REGISTRATION: &str = "elefren.registration";
|
|
const KEY_OAUTH_SESSION: &str = "elefren.session";
|
|
|
|
fn main() {
|
|
let config : Config = bootstrap::init().expect("error init config");
|
|
|
|
debug!("Loaded config: {:#?}", config);
|
|
|
|
let mut store = Store::from_file(&config.store);
|
|
store.set_autosave(true);
|
|
|
|
let registered = register(&mut store, &config);
|
|
|
|
let mastodon = open_session(&mut store, registered);
|
|
|
|
println!(
|
|
"{:?}",
|
|
mastodon
|
|
.get_home_timeline().expect("error get TL")
|
|
.items_iter()
|
|
.take(100)
|
|
.map(|item| {
|
|
format!("{}: {}", item.account.acct, item.content)
|
|
})
|
|
.collect::<Vec<String>>()
|
|
);
|
|
}
|
|
|
|
fn register(store : &mut Store, config : &Config) -> EleRegistratered {
|
|
match store.get::<ElefrenRegistration>(KEY_OAUTH_REGISTRATION) {
|
|
Some(reg) => {
|
|
info!("Loaded registration from store");
|
|
|
|
EleRegistratered::from_parts(
|
|
// this sucks
|
|
®.parts.0, ®.parts.1, ®.parts.2, ®.parts.3, reg.parts.4, reg.parts.5
|
|
)
|
|
}
|
|
None => {
|
|
info!("Creating a new registration");
|
|
|
|
let registered = Registration::new(&config.instance)
|
|
.client_name("manabu")
|
|
.build().expect("error register");
|
|
store.put(KEY_OAUTH_REGISTRATION, ElefrenRegistration { parts : registered.clone().into_parts() });
|
|
registered
|
|
}
|
|
}
|
|
}
|
|
|
|
fn open_session(store : &mut Store, registered: EleRegistratered) -> Mastodon<HttpSender> {
|
|
match store.get::<elefren::Data>(KEY_OAUTH_SESSION) {
|
|
Some(data) => {
|
|
info!("Reusing saved authorization.");
|
|
|
|
let cli = Mastodon::from(data);
|
|
// TODO check if the session is live, somehow
|
|
cli
|
|
}
|
|
None => {
|
|
info!("Creating new authorization.");
|
|
|
|
let cli = cli::authenticate(registered).expect("error auth");
|
|
store.put(KEY_OAUTH_SESSION, cli.data.clone());
|
|
cli
|
|
}
|
|
}
|
|
}
|
|
|