Changed to hardcoded any selector

This commit is contained in:
puffaboo 2022-06-01 18:31:14 +01:00
parent 4fcb8a9771
commit 4b8243ed58
4 changed files with 60 additions and 75 deletions

View File

@ -13,10 +13,12 @@ use crate::{
config::{FediverseConfig, Publisher},
publish::MastodonPublisher,
publish::MisskeyPublisher,
selection::{telegram::get_chat_ref, SelectorExt, TelegramSelector},
selection::{telegram::get_chat_ref, AnySelector, SelectorExt, TelegramSelector},
};
use futures::{SinkExt, StreamExt, TryStreamExt, channel::mpsc::channel, future::Either, sink::unfold};
use futures::{
channel::mpsc::channel, future::Either, sink::unfold, SinkExt, StreamExt, TryStreamExt,
};
use model::SampleModelExt;
mod config;
@ -66,20 +68,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
let cfg_clone = cfg.clone();
let mut model = TelegramSelector::new(
api,
chat,
Box::pin(unfold((), move |_, chat_ref| {
let mut cfg_clone = cfg_clone.clone();
async move {
if let ChatRef::Id(id) = &chat_ref {
cfg_clone.chat_ref = id.clone();
let _ = cfg_clone.save(CONFIG_PATH);
}
Ok::<_, Infallible>(())
}
})),
)
let mut model = AnySelector::new()
.filter(
model::GPTSampleModel::new(
cfg.python_path.clone(),
@ -145,9 +134,11 @@ async fn resolve_publisher(
config: &mut config::Config,
) -> Result<Either<MisskeyPublisher, MastodonPublisher>, Box<dyn Error>> {
let publisher = match &config.publisher {
config::Publisher::Misskey(cfg) => {
Either::Left(MisskeyPublisher::new(&cfg.base_url, cfg.token.clone(), cfg.visibility)?)
}
config::Publisher::Misskey(cfg) => Either::Left(MisskeyPublisher::new(
&cfg.base_url,
cfg.token.clone(),
cfg.visibility,
)?),
config::Publisher::Mastodon(cfg) => {
let app = AppBuilder {
client_name: "izzilis",

23
src/selection/any.rs Normal file
View File

@ -0,0 +1,23 @@
use std::convert::Infallible;
use futures::future::BoxFuture;
use super::Selector;
#[derive(Debug, Copy, Clone)]
pub struct AnySelector;
impl Selector for AnySelector {
type Error = Box<Infallible>;
type Response = BoxFuture<'static, Result<bool, Self::Error>>;
fn review(&self, message: String) -> Self::Response {
Box::pin(async move { Ok(message.len() != 0) })
}
}
impl AnySelector {
pub fn new() -> Self {
Self {}
}
}

View File

@ -1,29 +0,0 @@
use std::error::Error;
use async_std::io::stdin;
use futures::future::BoxFuture;
use super::Selector;
#[derive(Debug, Copy, Clone)]
pub struct ConsoleSelector;
impl Selector for ConsoleSelector {
type Error = Box<dyn Error>;
type Response = BoxFuture<'static, Result<bool, Self::Error>>;
fn review(&self, message: String) -> Self::Response {
println!("{} (y/N) ", message);
let stdin = stdin();
Box::pin(async move {
let mut buffer = String::new();
stdin.read_line(&mut buffer).await?;
Ok(
match buffer.chars().next().unwrap_or('n').to_ascii_lowercase() {
'y' => true,
_ => false,
},
)
})
}
}

View File

@ -2,9 +2,9 @@ use futures::{stream::BoxStream, Future, Stream, TryStreamExt};
use std::fmt::Debug;
use thiserror::Error;
mod console;
mod any;
pub mod telegram;
pub use console::ConsoleSelector;
pub use any::AnySelector;
pub use telegram::TelegramSelector;
pub trait Selector {