Get delta contexts chugging

This commit is contained in:
2021-10-31 16:28:46 +00:00
parent e99d824227
commit eec8669b88
2 changed files with 42 additions and 16 deletions

View File

@@ -7,7 +7,6 @@ use crate::messages::{
};
// use crate::{Handle, ChatInfo};
use async_std::channel::{self, Receiver};
use deltachat::accounts::Accounts;
const CHANNEL_CAPACITY: usize = 1024;
@@ -32,19 +31,27 @@ pub fn spawn() -> DeltaSystemHandle {
pub fn run(tx: FdSender<SystemMessage>, rx: Receiver<PurpleMessage>) {
logging::set_thread_logger(logging::RemoteLogger(tx.clone()));
log::info!("Starting Delta system");
let mut system = DeltaSystem::new(tx, rx);
log::debug!("Performing delta accounts setup");
let mut config_dir = DeltaSystem::user_dir();
config_dir.push("purple-plugin-delta");
let accounts =
async_std::task::block_on(Accounts::new("purple-plugin-delta".into(), config_dir)).unwrap();
let mut system = DeltaSystem::new(tx, rx, accounts);
async_std::task::block_on(system.run());
}
pub struct DeltaSystem {
tx: FdSender<SystemMessage>,
rx: Receiver<PurpleMessage>,
accounts: Option<Accounts>,
accounts: Accounts,
}
impl DeltaSystem {
fn new(tx: FdSender<SystemMessage>, rx: Receiver<PurpleMessage>) -> Self {
Self { tx, rx, accounts: None }
fn new(tx: FdSender<SystemMessage>, rx: Receiver<PurpleMessage>, accounts: Accounts) -> Self {
Self { tx, rx, accounts }
}
fn user_dir() -> async_std::path::PathBuf {
@@ -59,12 +66,6 @@ impl DeltaSystem {
}
async fn run(&mut self) {
log::debug!("Performing delta accounts setup");
let mut config_dir = DeltaSystem::user_dir();
config_dir.push("purple-plugin-delta");
self.accounts = Some(Accounts::new("purple-plugin-delta".into(), config_dir).await.unwrap());
log::info!("Looping on messages");
loop {
let purple_message = match self.rx.recv().await {
@@ -92,13 +93,34 @@ impl DeltaSystem {
async fn login(&mut self, account_info: AccountInfo) -> std::result::Result<(), String> {
log::debug!("login");
/*
let phone_number = { account_info.protocol_data.phone_number.clone() };
let email_address = { account_info.protocol_data.email_address.clone() };
let password = { account_info.protocol_data.imap_pass.clone() };
let handle = &account_info.handle;
// TODO: make this properly async
let ctx = match self.accounts.get_all().await.into_iter()
.map( |id| async_std::task::block_on(self.accounts.get_account(id)).unwrap() )
.find( |ctx| async_std::task::block_on(ctx.is_self_addr(&email_address)).unwrap() ) {
None => {
let id = self.accounts.add_account().await.unwrap();
self.accounts.get_account(id).await.unwrap()
},
Some(ctx) => ctx
};
// Now transpose config into ctx. TODO: rest of the fields
ctx.set_config(deltachat::config::Config::Addr, Some(&email_address)).await.unwrap();
ctx.set_config(deltachat::config::Config::MailPw, Some(&password)).await.unwrap();
ctx.configure().await.unwrap();
ctx.start_io(); // TODO: what to do with this future?
// TODO: set off event emitter
/*
let mut registered_account_info = {
self.tx
.account_proxy(&handle)
.exec(|account| {
.exec(|purple_account| {
let token =
account.get_string(protocol::RegistrationData::TOKEN_SETTING_KEY, "");
if token.is_empty() {

View File

@@ -76,6 +76,7 @@ pub struct MsgInfo {
#[derive(Debug, Default)]
pub struct AccountData {
email_address: String,
display_name: String,
imap_host: String,
imap_port: String,
@@ -139,7 +140,8 @@ impl purple::PrplPlugin for PurpleDelta {
.with_string_option("Display Name".into(), "displayname".into(), "".into())
.with_string_option("IMAP server host".into(), "mail_server".into(), "".into())
.with_string_option("IMAP server port".into(), "mail_port".into(), "".into())
// Username and password are mail_user and mail_pw
.with_string_option("IMAP server username".into(), "mail_user".into(), "".into())
// Password is account password
.with_string_option("SMTP server host".into(), "send_server".into(), "".into())
.with_string_option("SMTP server port".into(), "send_port".into(), "".into())
.with_string_option("SMTP server username".into(), "send_user".into(), "".into())
@@ -163,11 +165,12 @@ impl purple::PrplPlugin for PurpleDelta {
impl purple::LoginHandler for PurpleDelta {
fn login(&mut self, account: &mut Account) {
let email_address = account.get_username().unwrap().into();
let display_name = account.get_string("displayname", "");
let imap_host = account.get_string("mail_server", "");
let imap_port = account.get_string("mail_port", "");
let imap_user = account.get_username().unwrap().into();
let imap_user = account.get_string("mail_user", "");
let imap_pass = account.get_password().unwrap().into();
let smtp_host = account.get_string("send_server", "");
@@ -178,6 +181,7 @@ impl purple::LoginHandler for PurpleDelta {
let bcc_self = account.get_bool("bcc_self", false);
let protocol_data: AccountDataBox = Arc::new(AccountData {
email_address,
display_name,
imap_host,