[fractal] API: remove backend loop



commit 54ba60be54b9addbc7a9df0d3e5b875dabee80cc
Author: Alejandro Domínguez <adomu net-c com>
Date:   Wed Jun 24 05:02:31 2020 +0200

    API: remove backend loop

 fractal-gtk/src/actions/account_settings.rs |  10 +-
 fractal-gtk/src/actions/message.rs          |  32 ++-
 fractal-gtk/src/actions/room_settings.rs    |  10 +-
 fractal-gtk/src/app/backend_loop.rs         | 295 ++++++++++++++--------------
 fractal-gtk/src/app/connect/language.rs     |   4 +-
 fractal-gtk/src/app/mod.rs                  |   6 +-
 fractal-gtk/src/appop/account.rs            |  28 ++-
 fractal-gtk/src/appop/directory.rs          |  14 +-
 fractal-gtk/src/appop/invite.rs             |   8 +-
 fractal-gtk/src/appop/login.rs              |  13 +-
 fractal-gtk/src/appop/member.rs             |   4 +-
 fractal-gtk/src/appop/message.rs            |  28 ++-
 fractal-gtk/src/appop/mod.rs                |   7 +-
 fractal-gtk/src/appop/room.rs               |  26 ++-
 fractal-gtk/src/appop/start_chat.rs         |   8 +-
 fractal-gtk/src/appop/sync.rs               |  34 ++--
 fractal-gtk/src/appop/user.rs               |   6 +-
 fractal-gtk/src/widgets/address.rs          |  24 +--
 fractal-gtk/src/widgets/image.rs            |   6 +-
 fractal-gtk/src/widgets/media_viewer.rs     |  12 +-
 fractal-gtk/src/widgets/message.rs          |   7 +-
 fractal-gtk/src/widgets/room.rs             |   4 +-
 fractal-gtk/src/widgets/room_history.rs     |   6 +-
 fractal-gtk/src/widgets/room_settings.rs    |  16 +-
 fractal-matrix-api/src/backend/mod.rs       |  48 -----
 fractal-matrix-api/src/backend/types.rs     |  11 --
 26 files changed, 275 insertions(+), 392 deletions(-)
---
diff --git a/fractal-gtk/src/actions/account_settings.rs b/fractal-gtk/src/actions/account_settings.rs
index f4b1d77a..6a8a1c52 100644
--- a/fractal-gtk/src/actions/account_settings.rs
+++ b/fractal-gtk/src/actions/account_settings.rs
@@ -11,7 +11,7 @@ use std::sync::mpsc::Sender;
 use std::thread;
 
 use crate::app::App;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 
 use crate::widgets::FileDialog::open;
 
@@ -20,7 +20,7 @@ use crate::actions::ButtonState;
 // This creates all actions a user can perform in the account settings
 pub fn new(
     window: &gtk::Window,
-    tx: Sender<BKCommand>,
+    tx: Sender<BKResponse>,
     server_url: Url,
     access_token: AccessToken,
     uid: UserId,
@@ -50,10 +50,8 @@ pub fn new(
                         APPOP!(show_new_avatar, (path));
                     }
                     Err(err) => {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::SetUserAvatarError(
-                            err,
-                        )))
-                        .expect_log("Connection closed");
+                        tx.send(BKResponse::SetUserAvatarError(err))
+                            .expect_log("Connection closed");
                     }
                 }
             });
diff --git a/fractal-gtk/src/actions/message.rs b/fractal-gtk/src/actions/message.rs
index 311ee0d1..e3125408 100644
--- a/fractal-gtk/src/actions/message.rs
+++ b/fractal-gtk/src/actions/message.rs
@@ -14,7 +14,7 @@ use std::sync::mpsc::{Receiver, Sender};
 use std::thread;
 
 use crate::actions::AppState;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::error::Error;
 use crate::i18n::i18n;
 use crate::types::Message;
@@ -37,7 +37,7 @@ use crate::widgets::SourceDialog;
 /* This creates all actions the room history can perform */
 pub fn new(
     thread_pool: ThreadPool,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
     server_url: Url,
     access_token: AccessToken,
     ui: UI,
@@ -134,7 +134,7 @@ pub fn new(
                             .expect("failed to execute process");
                     }
                     Err(err) => {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::MediaError(err)))
+                        tx.send(BKResponse::MediaError(err))
                             .expect_log("Connection closed");
                     }
                 }
@@ -254,10 +254,8 @@ pub fn new(
             thread::spawn(move || {
                 let query = room::redact_msg(server, access_token, msg);
                 if let Err(err) = query {
-                    tx.send(BKCommand::SendBKResponse(
-                        BKResponse::SentMsgRedactionError(err),
-                    ))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::SentMsgRedactionError(err))
+                        .expect_log("Connection closed");
                 }
             });
         }
@@ -276,7 +274,7 @@ fn get_message(id: Option<&glib::Variant>) -> Option<Message> {
 }
 
 fn request_more_messages(
-    tx: Sender<BKCommand>,
+    tx: Sender<BKResponse>,
     server_url: Url,
     access_token: AccessToken,
     id: Option<RoomId>,
@@ -292,10 +290,8 @@ fn request_more_messages(
                     APPOP!(show_room_messages_top, (msgs, room, prev_batch));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomMessagesToError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::RoomMessagesToError(err))
+                        .expect_log("Connection closed");
                 }
             }
         });
@@ -307,10 +303,8 @@ fn request_more_messages(
                     APPOP!(show_room_messages_top, (msgs, room, prev_batch));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomMessagesToError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::RoomMessagesToError(err))
+                        .expect_log("Connection closed");
                 }
             }
         });
@@ -322,10 +316,8 @@ fn request_more_messages(
                     APPOP!(show_room_messages_top, (msgs, room, prev_batch));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomMessagesToError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::RoomMessagesToError(err))
+                        .expect_log("Connection closed");
                 }
             },
         );
diff --git a/fractal-gtk/src/actions/room_settings.rs b/fractal-gtk/src/actions/room_settings.rs
index d57be5f3..487d4238 100644
--- a/fractal-gtk/src/actions/room_settings.rs
+++ b/fractal-gtk/src/actions/room_settings.rs
@@ -11,7 +11,7 @@ use std::sync::mpsc::Sender;
 use std::thread;
 
 use crate::app::App;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::i18n::i18n;
 
 use crate::widgets::ErrorDialog;
@@ -22,7 +22,7 @@ use crate::actions::ButtonState;
 // This creates all actions a user can perform in the room settings
 pub fn new(
     window: &gtk::Window,
-    backend: &Sender<BKCommand>,
+    backend: &Sender<BKResponse>,
     server_url: Url,
     access_token: AccessToken,
 ) -> gio::SimpleActionGroup {
@@ -59,10 +59,8 @@ pub fn new(
                                 APPOP!(show_new_room_avatar);
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::SetRoomAvatarError(
-                                    err,
-                                )))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::SetRoomAvatarError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
                     });
diff --git a/fractal-gtk/src/app/backend_loop.rs b/fractal-gtk/src/app/backend_loop.rs
index 48b721d1..dfce4942 100644
--- a/fractal-gtk/src/app/backend_loop.rs
+++ b/fractal-gtk/src/app/backend_loop.rs
@@ -16,158 +16,159 @@ pub fn backend_loop(rx: Receiver<BKResponse>) {
     thread::spawn(move || {
         while let Ok(recv) = rx.recv() {
             match recv {
-                BKResponse::ShutDown => {
-                    break;
-                }
-
-                // errors
-                BKResponse::AccountDestructionError(err) => {
-                    let error = i18n("Couldn’t delete the account");
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "{}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::ChangePasswordError(err) => {
-                    let error = i18n("Couldn’t change the password");
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "{}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                    APPOP!(show_password_error_dialog, (error));
-                }
-                BKResponse::GetThreePIDError(_) => {
-                    let error = i18n("Sorry, account settings can’t be loaded.");
-                    APPOP!(show_load_settings_error_dialog, (error));
-                    let ctx = glib::MainContext::default();
-                    ctx.invoke(move || {
-                        activate_action("app", "back");
-                    })
-                }
-                BKResponse::GetTokenEmailError(Error::TokenUsed) => {
-                    let error = i18n("Email is already in use");
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::GetTokenEmailError(Error::Denied) => {
-                    let error = i18n("Please enter a valid email address.");
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::GetTokenEmailError(err) => {
-                    let error = i18n("Couldn’t add the email address.");
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "{}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::GetTokenPhoneError(Error::TokenUsed) => {
-                    let error = i18n("Phone number is already in use");
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::GetTokenPhoneError(Error::Denied) => {
-                    let error = i18n(
-                        "Please enter your phone number in the format: \n + your country code and your phone 
number.",
-                    );
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::GetTokenPhoneError(err) => {
-                    let error = i18n("Couldn’t add the phone number.");
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "{}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                    APPOP!(show_error_dialog_in_settings, (error));
-                }
-                BKResponse::NewRoomError(err, internal_id) => {
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "{}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-
-                    let error = i18n("Can’t create the room, try again");
-                    let state = AppState::NoRoom;
-                    APPOP!(remove_room, (internal_id));
-                    APPOP!(show_error, (error));
-                    APPOP!(set_state, (state));
-                }
-                BKResponse::JoinRoomError(err) => {
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "{}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-
-                    let error = i18n("Can’t join the room, try again.").to_string();
-                    let state = AppState::NoRoom;
-                    APPOP!(show_error, (error));
-                    APPOP!(set_state, (state));
-                }
-                BKResponse::ChangeLanguageError(err) => {
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "Error forming url to set room language: {}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                }
-                BKResponse::LoginError(_) => {
-                    let error = i18n("Can’t login, try again");
-                    let st = AppState::Login;
-                    APPOP!(show_error, (error));
-                    APPOP!(logout);
-                    APPOP!(set_state, (st));
-                }
-                BKResponse::AttachedFileError(err) => {
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "attaching {}: retrying send",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                    APPOP!(retry_send);
-                }
-                BKResponse::SentMsgError(Error::SendMsgError(txid)) => {
-                    error!("sending {}: retrying send", txid);
-                    APPOP!(retry_send);
-                }
-                BKResponse::SentMsgError(_) => {
-                    let error = i18n("Error sending message");
-                    APPOP!(show_error, (error));
-                }
-                BKResponse::SentMsgRedactionError(_) => {
-                    let error = i18n("Error deleting message");
-                    APPOP!(show_error, (error));
-                }
-                BKResponse::DirectoryProtocolsError(_) | BKResponse::DirectorySearchError(_) => {
-                    let error = i18n("Error searching for rooms");
-                    APPOP!(reset_directory_state);
-                    APPOP!(show_error, (error));
-                }
-                BKResponse::SyncError(err, number_tries) => {
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "SYNC Error: {}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                    let new_number_tries = number_tries + 1;
-                    APPOP!(sync_error, (new_number_tries));
-                }
-                err => {
-                    let err_str = format!("{:?}", err);
-                    error!(
-                        "Query error: {}",
-                        remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
-                    );
-                }
+                BKResponse::ShutDown => break,
+                err => dispatch_error(err),
             };
         }
     });
 }
 
+pub fn dispatch_error(error: BKResponse) {
+    match error {
+        BKResponse::AccountDestructionError(err) => {
+            let error = i18n("Couldn’t delete the account");
+            let err_str = format!("{:?}", err);
+            error!(
+                "{}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::ChangePasswordError(err) => {
+            let error = i18n("Couldn’t change the password");
+            let err_str = format!("{:?}", err);
+            error!(
+                "{}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            APPOP!(show_password_error_dialog, (error));
+        }
+        BKResponse::GetThreePIDError(_) => {
+            let error = i18n("Sorry, account settings can’t be loaded.");
+            APPOP!(show_load_settings_error_dialog, (error));
+            let ctx = glib::MainContext::default();
+            ctx.invoke(move || {
+                activate_action("app", "back");
+            })
+        }
+        BKResponse::GetTokenEmailError(Error::TokenUsed) => {
+            let error = i18n("Email is already in use");
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::GetTokenEmailError(Error::Denied) => {
+            let error = i18n("Please enter a valid email address.");
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::GetTokenEmailError(err) => {
+            let error = i18n("Couldn’t add the email address.");
+            let err_str = format!("{:?}", err);
+            error!(
+                "{}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::GetTokenPhoneError(Error::TokenUsed) => {
+            let error = i18n("Phone number is already in use");
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::GetTokenPhoneError(Error::Denied) => {
+            let error = i18n(
+                "Please enter your phone number in the format: \n + your country code and your phone 
number.",
+            );
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::GetTokenPhoneError(err) => {
+            let error = i18n("Couldn’t add the phone number.");
+            let err_str = format!("{:?}", err);
+            error!(
+                "{}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            APPOP!(show_error_dialog_in_settings, (error));
+        }
+        BKResponse::NewRoomError(err, internal_id) => {
+            let err_str = format!("{:?}", err);
+            error!(
+                "{}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+
+            let error = i18n("Can’t create the room, try again");
+            let state = AppState::NoRoom;
+            APPOP!(remove_room, (internal_id));
+            APPOP!(show_error, (error));
+            APPOP!(set_state, (state));
+        }
+        BKResponse::JoinRoomError(err) => {
+            let err_str = format!("{:?}", err);
+            error!(
+                "{}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            let error = i18n("Can’t join the room, try again.").to_string();
+            let state = AppState::NoRoom;
+            APPOP!(show_error, (error));
+            APPOP!(set_state, (state));
+        }
+        BKResponse::ChangeLanguageError(err) => {
+            let err_str = format!("{:?}", err);
+            error!(
+                "Error forming url to set room language: {}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+        }
+        BKResponse::LoginError(_) => {
+            let error = i18n("Can’t login, try again");
+            let st = AppState::Login;
+            APPOP!(show_error, (error));
+            APPOP!(logout);
+            APPOP!(set_state, (st));
+        }
+        BKResponse::AttachedFileError(err) => {
+            let err_str = format!("{:?}", err);
+            error!(
+                "attaching {}: retrying send",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            APPOP!(retry_send);
+        }
+        BKResponse::SentMsgError(Error::SendMsgError(txid)) => {
+            error!("sending {}: retrying send", txid);
+            APPOP!(retry_send);
+        }
+        BKResponse::SentMsgError(_) => {
+            let error = i18n("Error sending message");
+            APPOP!(show_error, (error));
+        }
+        BKResponse::SentMsgRedactionError(_) => {
+            let error = i18n("Error deleting message");
+            APPOP!(show_error, (error));
+        }
+        BKResponse::DirectoryProtocolsError(_) | BKResponse::DirectorySearchError(_) => {
+            let error = i18n("Error searching for rooms");
+            APPOP!(reset_directory_state);
+            APPOP!(show_error, (error));
+        }
+        BKResponse::SyncError(err, number_tries) => {
+            let err_str = format!("{:?}", err);
+            error!(
+                "SYNC Error: {}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+            let new_number_tries = number_tries + 1;
+            APPOP!(sync_error, (new_number_tries));
+        }
+        err => {
+            let err_str = format!("{:?}", err);
+            error!(
+                "Query error: {}",
+                remove_matrix_access_token_if_present(&err_str).unwrap_or(err_str)
+            );
+        }
+    }
+}
+
 /// This function removes the value of the `access_token` query from a URL used for accessing the Matrix API.
 /// The primary use case is the removing of sensitive information for logging.
 /// Specifically, the URL is expected to be contained within quotes and the token is replaced with 
`<redacted>`.
diff --git a/fractal-gtk/src/app/connect/language.rs b/fractal-gtk/src/app/connect/language.rs
index 9dda716c..f5bfd1db 100644
--- a/fractal-gtk/src/app/connect/language.rs
+++ b/fractal-gtk/src/app/connect/language.rs
@@ -1,5 +1,5 @@
 use crate::app::App;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 
 use fractal_api::backend::room;
 use fractal_api::util::ResultExpectLog;
@@ -38,7 +38,7 @@ impl App {
                             thread::spawn(move || {
                                 let query = room::set_language(access_token, server, uid, room_id, 
lang_code);
                                 if let Err(err) = query {
-                                    tx.send(BKCommand::SendBKResponse(BKResponse::ChangeLanguageError(err)))
+                                    tx.send(BKResponse::ChangeLanguageError(err))
                                         .expect_log("Connection closed");
                                 }
                             });
diff --git a/fractal-gtk/src/app/mod.rs b/fractal-gtk/src/app/mod.rs
index f0cca965..0ae62c77 100644
--- a/fractal-gtk/src/app/mod.rs
+++ b/fractal-gtk/src/app/mod.rs
@@ -12,7 +12,6 @@ use log::error;
 
 use crate::appop::AppOp;
 use crate::backend::BKResponse;
-use crate::backend::Backend;
 
 use crate::actions;
 use crate::config;
@@ -62,9 +61,6 @@ impl App {
     pub fn new(gtk_app: &gtk::Application) -> AppRef {
         let (tx, rx): (Sender<BKResponse>, Receiver<BKResponse>) = channel();
 
-        let bk = Backend::new(tx);
-        let apptx = bk.run();
-
         // Set up the textdomain for gettext
         setlocale(LocaleCategory::LcAll, "");
         bindtextdomain("fractal", config::LOCALEDIR);
@@ -164,7 +160,7 @@ impl App {
         stack.add_named(&child, "account-settings");
         stack_header.add_named(&child_header, "account-settings");
 
-        let op = Arc::new(Mutex::new(AppOp::new(ui.clone(), apptx)));
+        let op = Arc::new(Mutex::new(AppOp::new(ui.clone(), tx)));
 
         // Add login view to the main stack
         let login = widgets::LoginWidget::new(&op);
diff --git a/fractal-gtk/src/appop/account.rs b/fractal-gtk/src/appop/account.rs
index d29ee0ef..6257d05c 100644
--- a/fractal-gtk/src/appop/account.rs
+++ b/fractal-gtk/src/appop/account.rs
@@ -9,7 +9,7 @@ use crate::app::App;
 use crate::appop::AppOp;
 use crate::appop::AppState;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::i18n::i18n;
 use crate::widgets;
 use crate::widgets::AvatarExt;
@@ -35,7 +35,7 @@ impl AppOp {
                     APPOP!(set_three_pid, (l));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::GetThreePIDError(err)))
+                    tx.send(BKResponse::GetThreePIDError(err))
                         .expect_log("Connection closed");
                 }
             }
@@ -63,7 +63,7 @@ impl AppOp {
                             APPOP!(added_three_pid);
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::AddThreePIDError(err)))
+                            tx.send(BKResponse::AddThreePIDError(err))
                                 .expect_log("Connection closed");
                         }
                     }
@@ -133,10 +133,8 @@ impl AppOp {
                                 APPOP!(valid_phone_token, (sid, secret));
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(
-                                    BKResponse::SubmitPhoneTokenError(err),
-                                ))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::SubmitPhoneTokenError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
                     });
@@ -186,7 +184,7 @@ impl AppOp {
                             APPOP!(added_three_pid);
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::AddThreePIDError(err)))
+                            tx.send(BKResponse::AddThreePIDError(err))
                                 .expect_log("Connection closed");
                         }
                     }
@@ -631,7 +629,7 @@ impl AppOp {
                         APPOP!(show_new_username, (u));
                     }
                     Err(err) => {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::SetUserNameError(err)))
+                        tx.send(BKResponse::SetUserNameError(err))
                             .expect_log("Connection closed");
                     }
                 }
@@ -704,10 +702,8 @@ impl AppOp {
                                 APPOP!(password_changed);
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(
-                                    BKResponse::ChangePasswordError(err),
-                                ))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::ChangePasswordError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
                     });
@@ -825,10 +821,8 @@ impl AppOp {
                                 APPOP!(account_destruction_logoff);
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(
-                                    BKResponse::AccountDestructionError(err),
-                                ))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::AccountDestructionError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
                     });
diff --git a/fractal-gtk/src/appop/directory.rs b/fractal-gtk/src/appop/directory.rs
index 0f8ed61b..1dfa70f4 100644
--- a/fractal-gtk/src/appop/directory.rs
+++ b/fractal-gtk/src/appop/directory.rs
@@ -8,7 +8,7 @@ use fractal_api::util::ResultExpectLog;
 use crate::app::App;
 use crate::appop::AppOp;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::widgets;
 
 use super::RoomSearchPagination;
@@ -25,10 +25,8 @@ impl AppOp {
                     APPOP!(set_protocols, (protocols));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(
-                        BKResponse::DirectoryProtocolsError(err),
-                    ))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::DirectoryProtocolsError(err))
+                        .expect_log("Connection closed");
                 }
             }
         });
@@ -157,10 +155,8 @@ impl AppOp {
                     APPOP!(append_directory_rooms, (rooms, rooms_since));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::DirectorySearchError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::DirectorySearchError(err))
+                        .expect_log("Connection closed");
                 }
             }
         });
diff --git a/fractal-gtk/src/appop/invite.rs b/fractal-gtk/src/appop/invite.rs
index c8a7f00f..ef55b11f 100644
--- a/fractal-gtk/src/appop/invite.rs
+++ b/fractal-gtk/src/appop/invite.rs
@@ -10,7 +10,7 @@ use crate::app::App;
 use crate::appop::member::SearchType;
 use crate::appop::AppOp;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 
 use crate::globals;
 
@@ -175,7 +175,7 @@ impl AppOp {
                 thread::spawn(move || {
                     let query = room::invite(server, access_token, room_id, user_id);
                     if let Err(err) = query {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::InviteError(err)))
+                        tx.send(BKResponse::InviteError(err))
                             .expect_log("Connection closed");
                     }
                 });
@@ -240,7 +240,7 @@ impl AppOp {
                             APPOP!(reload_rooms);
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::JoinRoomError(err)))
+                            tx.send(BKResponse::JoinRoomError(err))
                                 .expect_log("Connection closed");
                         }
                     }
@@ -251,7 +251,7 @@ impl AppOp {
                     let query =
                         room::leave_room(login_data.server_url, login_data.access_token, room_id);
                     if let Err(err) = query {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::LeaveRoomError(err)))
+                        tx.send(BKResponse::LeaveRoomError(err))
                             .expect_log("Connection closed");
                     }
                 });
diff --git a/fractal-gtk/src/appop/login.rs b/fractal-gtk/src/appop/login.rs
index 4eabc0e1..be9499ff 100644
--- a/fractal-gtk/src/appop/login.rs
+++ b/fractal-gtk/src/appop/login.rs
@@ -10,9 +10,7 @@ use fractal_api::url::Url;
 use crate::app::App;
 use crate::appop::AppOp;
 
-use crate::backend::BKCommand;
 use crate::backend::BKResponse;
-use crate::backend::Backend;
 use crate::cache;
 
 use std::sync::mpsc::channel;
@@ -74,11 +72,10 @@ impl AppOp {
 
         // stoping the backend and starting again, we don't want to receive more messages from
         // backend
-        self.backend.send(BKCommand::ShutDown).unwrap();
+        self.backend.send(BKResponse::ShutDown).unwrap();
 
         let (tx, rx): (Sender<BKResponse>, Receiver<BKResponse>) = channel();
-        let bk = Backend::new(tx);
-        self.backend = bk.run();
+        self.backend = tx;
         backend_loop(rx);
     }
 
@@ -101,7 +98,7 @@ impl AppOp {
                     APPOP!(bk_login, (uid, tk, dev, server, identity));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::LoginError(err)))
+                    tx.send(BKResponse::LoginError(err))
                         .expect_log("Connection closed");
                 }
             },
@@ -109,7 +106,7 @@ impl AppOp {
     }
 
     pub fn disconnect(&self) {
-        self.backend.send(BKCommand::ShutDown).unwrap();
+        self.backend.send(BKResponse::ShutDown).unwrap();
     }
 
     pub fn logout(&mut self) {
@@ -122,7 +119,7 @@ impl AppOp {
                     APPOP!(bk_logout);
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::LogoutError(err)))
+                    tx.send(BKResponse::LogoutError(err))
                         .expect_log("Connection closed");
                 }
             }
diff --git a/fractal-gtk/src/appop/member.rs b/fractal-gtk/src/appop/member.rs
index 14d3f548..ebc4439e 100644
--- a/fractal-gtk/src/appop/member.rs
+++ b/fractal-gtk/src/appop/member.rs
@@ -10,7 +10,7 @@ use std::thread;
 
 use crate::actions::AppState;
 use crate::appop::AppOp;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::widgets;
 use crate::App;
 
@@ -198,7 +198,7 @@ impl AppOp {
                     APPOP!(user_search_finished, (users));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::UserSearchError(err)))
+                    tx.send(BKResponse::UserSearchError(err))
                         .expect_log("Connection closed");
                 }
             }
diff --git a/fractal-gtk/src/appop/message.rs b/fractal-gtk/src/appop/message.rs
index e7881cc1..190c6390 100644
--- a/fractal-gtk/src/appop/message.rs
+++ b/fractal-gtk/src/appop/message.rs
@@ -25,7 +25,7 @@ use crate::appop::room::Force;
 use crate::appop::AppOp;
 use crate::App;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::uitypes::MessageContent;
 use crate::uitypes::RowType;
 use crate::widgets;
@@ -174,10 +174,8 @@ impl AppOp {
                         APPOP!(clear_room_notifications, (r));
                     }
                     Err(err) => {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::MarkedAsReadError(
-                            err,
-                        )))
-                        .expect_log("Connection closed");
+                        tx.send(BKResponse::MarkedAsReadError(err))
+                            .expect_log("Connection closed");
                     }
                 }
             });
@@ -236,7 +234,7 @@ impl AppOp {
                                 APPOP!(sync, (initial, number_tries));
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::SentMsgError(err)))
+                                tx.send(BKResponse::SentMsgError(err))
                                     .expect_log("Connection closed");
                             }
                         }
@@ -642,7 +640,7 @@ fn get_file_media_info(file: &str, mimetype: &str) -> Option<JsonValue> {
     Some(info)
 }
 
-fn attach_file(tx: Sender<BKCommand>, baseu: Url, tk: AccessToken, mut msg: Message) {
+fn attach_file(tx: Sender<BKResponse>, baseu: Url, tk: AccessToken, mut msg: Message) {
     let fname = msg.url.clone().unwrap_or_default();
     let mut extra_content: Option<ExtraContent> = msg
         .clone()
@@ -671,10 +669,8 @@ fn attach_file(tx: Sender<BKCommand>, baseu: Url, tk: AccessToken, mut msg: Mess
                 msg.extra_content = serde_json::to_value(&extra_content).ok();
             }
             Err(err) => {
-                tx.send(BKCommand::SendBKResponse(BKResponse::AttachedFileError(
-                    err,
-                )))
-                .expect_log("Connection closed");
+                tx.send(BKResponse::AttachedFileError(err))
+                    .expect_log("Connection closed");
             }
         }
 
@@ -695,15 +691,13 @@ fn attach_file(tx: Sender<BKCommand>, baseu: Url, tk: AccessToken, mut msg: Mess
             APPOP!(attached_file, (msg));
         }
         Err(err) => {
-            tx.send(BKCommand::SendBKResponse(BKResponse::AttachedFileError(
-                err,
-            )))
-            .expect_log("Connection closed");
+            tx.send(BKResponse::AttachedFileError(err))
+                .expect_log("Connection closed");
         }
     };
 }
 
-fn send_msg_and_manage(tx: Sender<BKCommand>, baseu: Url, tk: AccessToken, msg: Message) {
+fn send_msg_and_manage(tx: Sender<BKResponse>, baseu: Url, tk: AccessToken, msg: Message) {
     match room::send_msg(baseu, tk, msg) {
         Ok((txid, evid)) => {
             APPOP!(msg_sent, (txid, evid));
@@ -712,7 +706,7 @@ fn send_msg_and_manage(tx: Sender<BKCommand>, baseu: Url, tk: AccessToken, msg:
             APPOP!(sync, (initial, number_tries));
         }
         Err(err) => {
-            tx.send(BKCommand::SendBKResponse(BKResponse::SentMsgError(err)))
+            tx.send(BKResponse::SentMsgError(err))
                 .expect_log("Connection closed");
         }
     };
diff --git a/fractal-gtk/src/appop/mod.rs b/fractal-gtk/src/appop/mod.rs
index 999159fa..bd72b1eb 100644
--- a/fractal-gtk/src/appop/mod.rs
+++ b/fractal-gtk/src/appop/mod.rs
@@ -15,8 +15,7 @@ use fractal_api::backend::ThreadPool;
 use fractal_api::cache::CacheMap;
 use fractal_api::url::Url;
 
-use crate::backend;
-use crate::backend::BKCommand;
+use crate::backend::{self, BKResponse};
 
 use crate::i18n;
 
@@ -86,7 +85,7 @@ pub struct LoginData {
 
 pub struct AppOp {
     pub ui: uibuilder::UI,
-    pub backend: Sender<backend::BKCommand>,
+    pub backend: Sender<backend::BKResponse>,
 
     pub syncing: bool, // TODO: Replace with a Mutex
     pub msg_queue: Vec<TmpMsg>,
@@ -127,7 +126,7 @@ pub struct AppOp {
 impl PasswordStorage for AppOp {}
 
 impl AppOp {
-    pub fn new(ui: uibuilder::UI, tx: Sender<BKCommand>) -> AppOp {
+    pub fn new(ui: uibuilder::UI, tx: Sender<BKResponse>) -> AppOp {
         let leaflet = ui
             .builder
             .get_object::<libhandy::Leaflet>("header_leaflet")
diff --git a/fractal-gtk/src/appop/room.rs b/fractal-gtk/src/appop/room.rs
index 09da88b7..92c98959 100644
--- a/fractal-gtk/src/appop/room.rs
+++ b/fractal-gtk/src/appop/room.rs
@@ -15,7 +15,7 @@ use crate::app::App;
 use crate::appop::AppOp;
 
 use crate::backend;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use fractal_api::util::cache_dir_path;
 
 use crate::actions;
@@ -88,7 +88,7 @@ impl AppOp {
                             APPOP!(set_room_members, (room, members));
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::RoomMembersError(err)))
+                            tx.send(BKResponse::RoomMembersError(err))
                                 .expect_log("Connection closed");
                         }
                     }
@@ -105,7 +105,7 @@ impl AppOp {
                             APPOP!(set_room_avatar, (room, avatar));
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::RoomAvatarError(err)))
+                            tx.send(BKResponse::RoomAvatarError(err))
                                 .expect_log("Connection closed");
                         }
                     },
@@ -161,7 +161,7 @@ impl AppOp {
                             APPOP!(added_to_fav, (r, tofav));
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::AddedToFavError(err)))
+                            tx.send(BKResponse::AddedToFavError(err))
                                 .expect_log("Connection closed");
                         }
                     }
@@ -261,7 +261,7 @@ impl AppOp {
                     APPOP!(set_room_avatar, (room, avatar));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomAvatarError(err)))
+                    tx.send(BKResponse::RoomAvatarError(err))
                         .expect_log("Connection closed");
                 }
             },
@@ -278,7 +278,7 @@ impl AppOp {
                     APPOP!(set_room_detail, (room, key, v));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomDetailError(err)))
+                    tx.send(BKResponse::RoomDetailError(err))
                         .expect_log("Connection closed");
                 }
             }
@@ -347,7 +347,7 @@ impl AppOp {
         thread::spawn(move || {
             let query = room::leave_room(login_data.server_url, login_data.access_token, room_id);
             if let Err(err) = query {
-                tx.send(BKCommand::SendBKResponse(BKResponse::LeaveRoomError(err)))
+                tx.send(BKResponse::LeaveRoomError(err))
                     .expect_log("Connection closed");
             }
         });
@@ -430,10 +430,8 @@ impl AppOp {
                     APPOP!(new_room, (r, id));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::NewRoomError(
-                        err, int_id,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::NewRoomError(err, int_id))
+                        .expect_log("Connection closed");
                 }
             }
         });
@@ -590,7 +588,7 @@ impl AppOp {
                     APPOP!(reload_rooms);
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::JoinRoomError(err)))
+                    tx.send(BKResponse::JoinRoomError(err))
                         .expect_log("Connection closed");
                 }
             }
@@ -736,7 +734,7 @@ impl AppOp {
                     APPOP!(set_room_avatar, (room, avatar));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomAvatarError(err)))
+                    tx.send(BKResponse::RoomAvatarError(err))
                         .expect_log("Connection closed");
                 }
             }
@@ -792,7 +790,7 @@ impl AppOp {
                 active_room,
             );
             if let Err(err) = query {
-                tx.send(BKCommand::SendBKResponse(BKResponse::SendTypingError(err)))
+                tx.send(BKResponse::SendTypingError(err))
                     .expect_log("Connection closed");
             }
         });
diff --git a/fractal-gtk/src/appop/start_chat.rs b/fractal-gtk/src/appop/start_chat.rs
index d6b9a2bb..82fd2a8a 100644
--- a/fractal-gtk/src/appop/start_chat.rs
+++ b/fractal-gtk/src/appop/start_chat.rs
@@ -9,7 +9,7 @@ use crate::app::App;
 use crate::appop::AppOp;
 use crate::appop::SearchType;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::types::{Room, RoomMembership, RoomTag};
 
 impl AppOp {
@@ -39,10 +39,8 @@ impl AppOp {
                     APPOP!(new_room, (r, id));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::NewRoomError(
-                        err, int_id,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::NewRoomError(err, int_id))
+                        .expect_log("Connection closed");
                 }
             }
         });
diff --git a/fractal-gtk/src/appop/sync.rs b/fractal-gtk/src/appop/sync.rs
index 84e186ab..3b1e658f 100644
--- a/fractal-gtk/src/appop/sync.rs
+++ b/fractal-gtk/src/appop/sync.rs
@@ -9,7 +9,7 @@ use crate::appop::AppOp;
 
 use crate::backend::{
     sync::{self, RoomElement, SyncRet},
-    BKCommand, BKResponse,
+    BKResponse,
 };
 
 impl AppOp {
@@ -55,7 +55,7 @@ impl AppOp {
                                 }
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::RoomsError(err)))
+                                tx.send(BKResponse::RoomsError(err))
                                     .expect_log("Connection closed");
                             }
                         };
@@ -78,10 +78,8 @@ impl AppOp {
                                 APPOP!(set_rooms, (rooms, clear_room_list));
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::UpdateRoomsError(
-                                    err,
-                                )))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::UpdateRoomsError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
 
@@ -90,10 +88,8 @@ impl AppOp {
                                 APPOP!(show_room_messages, (msgs));
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::RoomMessagesError(
-                                    err,
-                                )))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::RoomMessagesError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
 
@@ -103,10 +99,8 @@ impl AppOp {
                                 APPOP!(set_rooms, (rooms, clear_room_list));
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::UpdateRoomsError(
-                                    err,
-                                )))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::UpdateRoomsError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
 
@@ -142,10 +136,8 @@ impl AppOp {
                                 }
                             }
                             Err(err) => {
-                                tx.send(BKCommand::SendBKResponse(BKResponse::RoomElementError(
-                                    err,
-                                )))
-                                .expect_log("Connection closed");
+                                tx.send(BKResponse::RoomElementError(err))
+                                    .expect_log("Connection closed");
                             }
                         }
 
@@ -154,10 +146,8 @@ impl AppOp {
                         APPOP!(synced, (s));
                     }
                     Err((err, n_tries)) => {
-                        tx.send(BKCommand::SendBKResponse(BKResponse::SyncError(
-                            err, n_tries,
-                        )))
-                        .expect_log("Connection closed");
+                        tx.send(BKResponse::SyncError(err, n_tries))
+                            .expect_log("Connection closed");
                     }
                 }
             });
diff --git a/fractal-gtk/src/appop/user.rs b/fractal-gtk/src/appop/user.rs
index 6f067a3c..0ac054fc 100644
--- a/fractal-gtk/src/appop/user.rs
+++ b/fractal-gtk/src/appop/user.rs
@@ -12,7 +12,7 @@ use crate::appop::AppOp;
 
 use crate::cache::download_to_cache;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::widgets;
 use crate::widgets::AvatarExt;
 
@@ -29,7 +29,7 @@ impl AppOp {
                     APPOP!(set_username, (username));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::NameError(err)))
+                    tx.send(BKResponse::NameError(err))
                         .expect_log("Connection closed");
                 }
             }
@@ -41,7 +41,7 @@ impl AppOp {
                     APPOP!(set_avatar, (path));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::AvatarError(err)))
+                    tx.send(BKResponse::AvatarError(err))
                         .expect_log("Connection closed");
                 }
             }
diff --git a/fractal-gtk/src/widgets/address.rs b/fractal-gtk/src/widgets/address.rs
index bcbd82bf..eb0e47e4 100644
--- a/fractal-gtk/src/widgets/address.rs
+++ b/fractal-gtk/src/widgets/address.rs
@@ -12,7 +12,7 @@ use std::thread;
 
 use crate::app::App;
 use crate::appop::AppOp;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 
 #[derive(Debug, Clone)]
 pub enum AddressType {
@@ -216,7 +216,7 @@ impl<'a> Address<'a> {
 }
 
 fn delete_address(
-    tx: Sender<BKCommand>,
+    tx: Sender<BKResponse>,
     medium: Medium,
     address: String,
     server_url: Url,
@@ -228,17 +228,15 @@ fn delete_address(
                 APPOP!(get_three_pid);
             }
             Err(err) => {
-                tx.send(BKCommand::SendBKResponse(BKResponse::DeleteThreePIDError(
-                    err,
-                )))
-                .expect_log("Connection closed");
+                tx.send(BKResponse::DeleteThreePIDError(err))
+                    .expect_log("Connection closed");
             }
         }
     });
 }
 
 fn add_address(
-    tx: Sender<BKCommand>,
+    tx: Sender<BKResponse>,
     medium: Medium,
     id_server: Url,
     address: String,
@@ -255,10 +253,8 @@ fn add_address(
                     APPOP!(get_token_phone, (sid, secret))
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::GetTokenPhoneError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::GetTokenPhoneError(err))
+                        .expect_log("Connection closed");
                 }
             }
         }
@@ -270,10 +266,8 @@ fn add_address(
                     APPOP!(get_token_email, (sid, secret));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::GetTokenEmailError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::GetTokenEmailError(err))
+                        .expect_log("Connection closed");
                 }
             }
         }
diff --git a/fractal-gtk/src/widgets/image.rs b/fractal-gtk/src/widgets/image.rs
index f6b030b8..7372b6be 100644
--- a/fractal-gtk/src/widgets/image.rs
+++ b/fractal-gtk/src/widgets/image.rs
@@ -15,7 +15,7 @@ use std::sync::mpsc::channel;
 use std::sync::mpsc::{Receiver, Sender};
 use std::sync::{Arc, Mutex};
 
-use crate::backend::BKCommand;
+use crate::backend::BKResponse;
 use crate::error::Error;
 use std::sync::mpsc::TryRecvError;
 
@@ -26,7 +26,7 @@ pub struct Image {
     pub server_url: Url,
     pub max_size: Option<(i32, i32)>,
     pub widget: DrawingArea,
-    pub backend: Sender<BKCommand>,
+    pub backend: Sender<BKResponse>,
     pub pixbuf: Arc<Mutex<Option<Pixbuf>>>,
     /// useful to avoid the scale_simple call on every draw
     pub scaled: Arc<Mutex<Option<Pixbuf>>>,
@@ -51,7 +51,7 @@ impl Image {
     ///           .size(Some((50, 50)))
     ///           .build();
     /// ```
-    pub fn new(backend: &Sender<BKCommand>, server_url: Url, path: &str) -> Image {
+    pub fn new(backend: &Sender<BKResponse>, server_url: Url, path: &str) -> Image {
         let da = DrawingArea::new();
         da.add_events(gdk::EventMask::ENTER_NOTIFY_MASK);
         da.add_events(gdk::EventMask::LEAVE_NOTIFY_MASK);
diff --git a/fractal-gtk/src/widgets/media_viewer.rs b/fractal-gtk/src/widgets/media_viewer.rs
index fa1b936e..498f960f 100644
--- a/fractal-gtk/src/widgets/media_viewer.rs
+++ b/fractal-gtk/src/widgets/media_viewer.rs
@@ -20,7 +20,7 @@ use gtk::Overlay;
 use crate::types::Message;
 use crate::types::Room;
 
-use crate::backend::BKCommand;
+use crate::backend::BKResponse;
 use crate::uitypes::RowType;
 use crate::widgets::image;
 use crate::widgets::message_menu::MessageMenu;
@@ -38,7 +38,7 @@ pub struct MediaViewer {
     data: Rc<RefCell<Data>>,
     /* gtk widgets we need to have a reference to */
     pub builder: gtk::Builder,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
 }
 
 #[derive(Debug)]
@@ -127,7 +127,7 @@ enum Widget {
 struct Data {
     builder: gtk::Builder,
     main_window: gtk::Window,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
     server_url: Url,
     access_token: AccessToken,
     uid: UserId,
@@ -148,7 +148,7 @@ struct Data {
 
 impl Data {
     pub fn new(
-        backend: Sender<BKCommand>,
+        backend: Sender<BKResponse>,
         server_url: Url,
         access_token: AccessToken,
         media_list: Vec<Message>,
@@ -631,7 +631,7 @@ impl Drop for Data {
 
 impl MediaViewer {
     pub fn new(
-        backend: Sender<BKCommand>,
+        backend: Sender<BKResponse>,
         main_window: gtk::Window,
         room: &Room,
         current_media_msg: &Message,
@@ -1028,7 +1028,7 @@ fn load_more_media(
     thread_pool: ThreadPool,
     data: Rc<RefCell<Data>>,
     builder: gtk::Builder,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
 ) {
     data.borrow_mut().loading_more_media = loading_state(&builder, true);
 
diff --git a/fractal-gtk/src/widgets/message.rs b/fractal-gtk/src/widgets/message.rs
index ddbac285..c9560d69 100644
--- a/fractal-gtk/src/widgets/message.rs
+++ b/fractal-gtk/src/widgets/message.rs
@@ -12,8 +12,7 @@ use std::rc::Rc;
 use std::sync::mpsc::Sender;
 use std::sync::{Arc, Mutex};
 
-use crate::backend::BKCommand;
-
+use crate::backend::BKResponse;
 use crate::util::markup_text;
 
 use crate::cache::download_to_cache;
@@ -31,7 +30,7 @@ use crate::widgets::{AudioPlayerWidget, PlayerExt, VideoPlayerWidget};
 /* A message row in the room history */
 #[derive(Clone, Debug)]
 pub struct MessageBox {
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
     server_url: Url,
     username: gtk::Label,
     pub username_event_box: gtk::EventBox,
@@ -44,7 +43,7 @@ pub struct MessageBox {
 }
 
 impl MessageBox {
-    pub fn new(backend: Sender<BKCommand>, server_url: Url) -> MessageBox {
+    pub fn new(backend: Sender<BKResponse>, server_url: Url) -> MessageBox {
         let username = gtk::Label::new(None);
         let eb = gtk::EventBox::new();
         let eventbox = gtk::EventBox::new();
diff --git a/fractal-gtk/src/widgets/room.rs b/fractal-gtk/src/widgets/room.rs
index 50a9486a..60f51cdc 100644
--- a/fractal-gtk/src/widgets/room.rs
+++ b/fractal-gtk/src/widgets/room.rs
@@ -7,7 +7,7 @@ use std::thread;
 
 use crate::types::Room;
 
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 
 use crate::util::markup_text;
 
@@ -139,7 +139,7 @@ impl<'a> RoomBox<'a> {
                             APPOP!(reload_rooms);
                         }
                         Err(err) => {
-                            tx.send(BKCommand::SendBKResponse(BKResponse::JoinRoomError(err)))
+                            tx.send(BKResponse::JoinRoomError(err))
                                 .expect_log("Connection closed");
                         }
                     }
diff --git a/fractal-gtk/src/widgets/room_history.rs b/fractal-gtk/src/widgets/room_history.rs
index 9d61ba31..8f474539 100644
--- a/fractal-gtk/src/widgets/room_history.rs
+++ b/fractal-gtk/src/widgets/room_history.rs
@@ -11,7 +11,7 @@ use std::sync::mpsc::Sender;
 use std::sync::{Arc, Mutex};
 
 use crate::appop::AppOp;
-use crate::backend::BKCommand;
+use crate::backend::BKResponse;
 use crate::i18n::i18n;
 use crate::uitypes::MessageContent;
 use crate::uitypes::RowType;
@@ -255,7 +255,7 @@ impl Element {
 pub struct RoomHistory {
     /* Contains a list of msg ids to keep track of the displayed messages */
     rows: Rc<RefCell<List>>,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
     server_url: Url,
     source_id: Rc<RefCell<Option<source::SourceId>>>,
     queue: Rc<RefCell<VecDeque<MessageContent>>>,
@@ -680,7 +680,7 @@ fn create_row(
     user_info_cache: Arc<Mutex<CacheMap<UserId, (String, String)>>>,
     row: MessageContent,
     has_header: bool,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
     server_url: Url,
     rows: &Rc<RefCell<List>>,
 ) -> widgets::MessageBox {
diff --git a/fractal-gtk/src/widgets/room_settings.rs b/fractal-gtk/src/widgets/room_settings.rs
index 764117b7..50ab379e 100644
--- a/fractal-gtk/src/widgets/room_settings.rs
+++ b/fractal-gtk/src/widgets/room_settings.rs
@@ -16,7 +16,7 @@ use gtk::prelude::*;
 use crate::actions;
 use crate::actions::{ButtonState, StateExt};
 use crate::app::App;
-use crate::backend::{BKCommand, BKResponse};
+use crate::backend::BKResponse;
 use crate::types::Member;
 use crate::util::markup_text;
 use crate::widgets;
@@ -31,7 +31,7 @@ pub struct RoomSettings {
     uid: UserId,
     builder: gtk::Builder,
     members_list: Option<MembersList>,
-    backend: Sender<BKCommand>,
+    backend: Sender<BKResponse>,
     server_url: Url,
     access_token: AccessToken,
 }
@@ -39,7 +39,7 @@ pub struct RoomSettings {
 impl RoomSettings {
     pub fn new(
         window: &gtk::Window,
-        backend: Sender<BKCommand>,
+        backend: Sender<BKResponse>,
         uid: UserId,
         room: Room,
         server_url: Url,
@@ -440,7 +440,7 @@ impl RoomSettings {
                     APPOP!(set_room_avatar, (room, avatar));
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::RoomAvatarError(err)))
+                    tx.send(BKResponse::RoomAvatarError(err))
                         .expect_log("Connection closed");
                 }
             },
@@ -513,7 +513,7 @@ impl RoomSettings {
                     APPOP!(show_new_room_name);
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::SetRoomNameError(err)))
+                    tx.send(BKResponse::SetRoomNameError(err))
                         .expect_log("Connection closed");
                 }
             },
@@ -573,10 +573,8 @@ impl RoomSettings {
                     APPOP!(show_new_room_topic);
                 }
                 Err(err) => {
-                    tx.send(BKCommand::SendBKResponse(BKResponse::SetRoomTopicError(
-                        err,
-                    )))
-                    .expect_log("Connection closed");
+                    tx.send(BKResponse::SetRoomTopicError(err))
+                        .expect_log("Connection closed");
                 }
             },
         );
diff --git a/fractal-matrix-api/src/backend/mod.rs b/fractal-matrix-api/src/backend/mod.rs
index e63cf782..1e9a4ebc 100644
--- a/fractal-matrix-api/src/backend/mod.rs
+++ b/fractal-matrix-api/src/backend/mod.rs
@@ -1,10 +1,3 @@
-use std::sync::mpsc::channel;
-use std::sync::mpsc::RecvError;
-use std::sync::mpsc::{Receiver, Sender};
-use std::thread;
-
-use crate::util::ResultExpectLog;
-
 pub mod directory;
 pub mod media;
 pub mod register;
@@ -13,47 +6,6 @@ pub mod sync;
 mod types;
 pub mod user;
 
-pub use self::types::BKCommand;
 pub use self::types::BKResponse;
-pub use self::types::Backend;
 pub use self::types::RoomType;
 pub use self::types::ThreadPool;
-
-impl Backend {
-    pub fn new(tx: Sender<BKResponse>) -> Backend {
-        Backend { tx }
-    }
-
-    pub fn run(mut self) -> Sender<BKCommand> {
-        let (apptx, rx): (Sender<BKCommand>, Receiver<BKCommand>) = channel();
-
-        thread::spawn(move || loop {
-            let cmd = rx.recv();
-            if !self.command_recv(cmd) {
-                break;
-            }
-        });
-
-        apptx
-    }
-
-    pub fn command_recv(&mut self, cmd: Result<BKCommand, RecvError>) -> bool {
-        let tx = self.tx.clone();
-
-        match cmd {
-            Ok(BKCommand::SendBKResponse(response)) => {
-                tx.send(response).expect_log("Connection closed");
-            }
-            Ok(BKCommand::ShutDown) => {
-                tx.send(BKResponse::ShutDown)
-                    .expect_log("Connection closed");
-                return false;
-            }
-            Err(_) => {
-                return false;
-            }
-        };
-
-        true
-    }
-}
diff --git a/fractal-matrix-api/src/backend/types.rs b/fractal-matrix-api/src/backend/types.rs
index b4f77150..c37a3929 100644
--- a/fractal-matrix-api/src/backend/types.rs
+++ b/fractal-matrix-api/src/backend/types.rs
@@ -1,16 +1,9 @@
 use ruma_identifiers::RoomId;
-use std::sync::mpsc::Sender;
 use std::sync::{Arc, Condvar, Mutex};
 use std::thread;
 
 use crate::error::Error;
 
-#[derive(Debug)]
-pub enum BKCommand {
-    ShutDown,
-    SendBKResponse(BKResponse),
-}
-
 #[derive(Debug)]
 pub enum BKResponse {
     ShutDown,
@@ -109,7 +102,3 @@ impl ThreadPool {
         });
     }
 }
-
-pub struct Backend {
-    pub tx: Sender<BKResponse>,
-}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]