diff --git a/src/ad_interface.cpp b/src/ad_interface.cpp index 696a7d3e..5db9649e 100644 --- a/src/ad_interface.cpp +++ b/src/ad_interface.cpp @@ -264,8 +264,6 @@ QList load_children(const QString &dn) { const char *dn_cstr = qstring_to_cstr(dn); char **children_raw = ad_list(dn_cstr); - // TODO: error check - if (children_raw != NULL) { auto children = QList(); @@ -281,22 +279,21 @@ QList load_children(const QString &dn) { return children; } else { + // TODO: is this still a fail if there are no children? + emit ad_interface.load_children_failed(dn, get_error_str()); + return QList(); } } void load_attributes(const QString &dn) { if (FAKE_AD) { - return ; + return; } - // TODO: save original attributes ordering and load it like that into model - const char *dn_cstr = qstring_to_cstr(dn); char** attributes_raw = ad_get_attribute(dn_cstr, NULL); - // TODO: handle errors - if (attributes_raw != NULL) { attributes_map[dn] = QMap>(); @@ -322,6 +319,8 @@ void load_attributes(const QString &dn) { free(attributes_raw[i]); } free(attributes_raw); + } else { + emit ad_interface.load_attributes_failed(dn, get_error_str()); } } @@ -386,8 +385,6 @@ bool set_attribute(const QString &dn, const QString &attribute, const QString &v const char *attribute_cstr = qstring_to_cstr(attribute); const char *value_cstr = qstring_to_cstr(value); - // TODO: handle errors - result = ad_mod_replace(dn_cstr, attribute_cstr, value_cstr); } @@ -409,8 +406,6 @@ bool set_attribute(const QString &dn, const QString &attribute, const QString &v bool create_entry(const QString &name, const QString &dn, NewEntryType type) { int result = AD_INVALID_DN; - // TODO: handle errors - if (FAKE_AD) { switch (type) { case User: { @@ -479,15 +474,12 @@ void delete_entry(const QString &dn) { } else { const char *dn_cstr = qstring_to_cstr(dn); - // TODO: handle all possible side-effects? - // probably a lot of stuff, like group membership and stuff - - // TODO: handle errors - result = ad_object_delete(dn_cstr); } if (result == AD_SUCCESS) { + // TODO: handle all possible side-effects? + // probably a lot of stuff, like group membership and stuff emit ad_interface.delete_entry_complete(dn); attributes_map.remove(dn); @@ -499,7 +491,6 @@ void delete_entry(const QString &dn) { void move_user(const QString &user_dn, const QString &container_dn) { int result = AD_INVALID_DN; - // TODO: duplicated QString user_name = extract_name_from_dn(user_dn); QString new_dn = "CN=" + user_name + "," + container_dn; diff --git a/src/ad_interface.h b/src/ad_interface.h index f1eb4b5c..eaa0d443 100644 --- a/src/ad_interface.h +++ b/src/ad_interface.h @@ -34,6 +34,9 @@ public: public slots: signals: + void load_children_failed(const QString &dn, const QString &error_str); + void load_attributes_failed(const QString &dn, const QString &error_str); + void delete_entry_complete(const QString &dn); void set_attribute_complete(const QString &dn, const QString &attribute, const QString &old_value, const QString &value); void create_entry_complete(const QString &dn, NewEntryType type); diff --git a/src/ad_model.cpp b/src/ad_model.cpp index e12b9c99..28a9a85c 100644 --- a/src/ad_model.cpp +++ b/src/ad_model.cpp @@ -113,7 +113,7 @@ void init_row(QList row, const QString &dn) { bool is_container = false; const QList container_objectClasses = {"container", "organizationalUnit", "builtinDomain", "domain"}; for (auto c : container_objectClasses) { - if (attribute_value_exists("objectClass", c)) { + if (attribute_value_exists(dn, "objectClass", c)) { is_container = true; break; } @@ -144,7 +144,7 @@ void init_row(QList row, const QString &dn) { }; QString icon_name = "dialog-question"; for (auto c : class_to_icon.keys()) { - if (attribute_value_exists("objectClass", c)) { + if (attribute_value_exists(dn, "objectClass", c)) { icon_name = class_to_icon[c]; break; } diff --git a/src/attributes_model.cpp b/src/attributes_model.cpp index 90b5dd23..03c02db3 100644 --- a/src/attributes_model.cpp +++ b/src/attributes_model.cpp @@ -63,4 +63,4 @@ void AttributesModel::on_delete_entry_complete(const QString &dn) { if (target_dn == dn) { change_target(QString("")); } -} \ No newline at end of file +} diff --git a/src/status_bar.cpp b/src/status_bar.cpp index cce44310..817e039f 100644 --- a/src/status_bar.cpp +++ b/src/status_bar.cpp @@ -8,6 +8,13 @@ StatusBar::StatusBar() showMessage(tr("Ready"), 10 * 1000); // Connect signals + connect( + &ad_interface, &AdInterface::load_children_failed, + this, &StatusBar::on_load_children_failed); + connect( + &ad_interface, &AdInterface::load_attributes_failed, + this, &StatusBar::on_load_attributes_failed); + connect( &ad_interface, &AdInterface::create_entry_complete, this, &StatusBar::on_create_entry_complete); @@ -35,6 +42,17 @@ StatusBar::StatusBar() this, &StatusBar::on_move_user_failed); } +void StatusBar::on_load_children_failed(const QString &dn, const QString &error_str) { + QString msg = QString("Failed to load children of \"%1\". Error: \"%2\"").arg(dn, error_str); + + showMessage(msg); +} +void StatusBar::on_load_attributes_failed(const QString &dn, const QString &error_str) { + QString msg = QString("Failed to load attributes of \"%1\". Error: \"%2\"").arg(dn, error_str); + + showMessage(msg); +} + void StatusBar::on_delete_entry_complete(const QString &dn) { QString msg = QString("Deleted entry \"%1\"").arg(dn); diff --git a/src/status_bar.h b/src/status_bar.h index 9ab06979..b676402a 100644 --- a/src/status_bar.h +++ b/src/status_bar.h @@ -17,6 +17,9 @@ public: explicit StatusBar(); private slots: + void on_load_children_failed(const QString &dn, const QString &error_str); + void on_load_attributes_failed(const QString &dn, const QString &error_str); + void on_delete_entry_complete(const QString &dn); void on_set_attribute_complete(const QString &dn, const QString &attribute, const QString &old_value, const QString &value); void on_create_entry_complete(const QString &dn, NewEntryType type);