[niepce] import: importer is a shared_ptr<>



commit 5606de363f9462fa355db8bc2de9780c2960e2d1
Author: Hubert Figuière <hub figuiere net>
Date:   Fri May 12 23:05:02 2017 -0400

    import: importer is a shared_ptr<>

 src/niepce/ui/dialogs/importdialog.cpp |   16 ++++++++--------
 src/niepce/ui/dialogs/importdialog.hpp |    4 ++--
 src/niepce/ui/niepcewindow.cpp         |    4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)
---
diff --git a/src/niepce/ui/dialogs/importdialog.cpp b/src/niepce/ui/dialogs/importdialog.cpp
index 90dc16d..e271065 100644
--- a/src/niepce/ui/dialogs/importdialog.cpp
+++ b/src/niepce/ui/dialogs/importdialog.cpp
@@ -59,7 +59,6 @@ ImportDialog::ImportDialog()
 
 ImportDialog::~ImportDialog()
 {
-    delete m_importer;
 }
 
 void ImportDialog::setup_widget()
@@ -134,13 +133,14 @@ void ImportDialog::setToImport(const Glib::ustring & f)
 {
     if (!m_importer) {
         // FIXME this should be the right kind
-        m_importer = new eng::DirectoryImporter;
+        m_importer = std::make_shared<eng::DirectoryImporter>();
     }
-    auto source_content = std::async(std::launch::async,
-                                     [f, this] () {
-                                         return m_importer->listSourceContent(
-                                             f);
-                                     });
+    auto importer = m_importer;
+    auto source_content =
+      std::async(std::launch::async,
+                 [f, importer] () {
+                   return importer->listSourceContent(f);
+                 });
 
     m_folder_path_source = f;
     m_destinationFolder->set_text(fwk::path_basename(f));
@@ -149,7 +149,7 @@ void ImportDialog::setToImport(const Glib::ustring & f)
     m_images_list_model->clear();
 
     // XXX this should be an event from the async result instead
-    if(source_content.get()) {
+    if (source_content.get()) {
         auto list_to_import = m_importer->getSourceContent();
 
         for(const auto & _f : list_to_import) {
diff --git a/src/niepce/ui/dialogs/importdialog.hpp b/src/niepce/ui/dialogs/importdialog.hpp
index 6841938..f399c9e 100644
--- a/src/niepce/ui/dialogs/importdialog.hpp
+++ b/src/niepce/ui/dialogs/importdialog.hpp
@@ -77,14 +77,14 @@ public:
     const Glib::ustring & sourcePath() const
         { return m_folder_path_source; }
     void setToImport(const Glib::ustring & f);
-    eng::IImporter* importer() const
+    const std::shared_ptr<eng::IImporter>& importer() const
         { return m_importer; }
 private:
     class ImportParam;
 
     void doSelectDirectories();
 
-    eng::IImporter *m_importer;
+    std::shared_ptr<eng::IImporter> m_importer; // as shared_ptr<> for lambda capture
     Glib::ustring m_folder_path_source;
 
     Gtk::ComboBox *m_date_tz_combo;
diff --git a/src/niepce/ui/niepcewindow.cpp b/src/niepce/ui/niepcewindow.cpp
index 1827413..24b2f42 100644
--- a/src/niepce/ui/niepcewindow.cpp
+++ b/src/niepce/ui/niepcewindow.cpp
@@ -263,8 +263,8 @@ void NiepceWindow::on_action_file_import()
         if(!source.empty()) {
             cfg.setValue("last_import_location", source);
 
-            eng::IImporter* importer = import_dialog->importer();
-            DBG_ASSERT(importer, "Import can't be null if we clicked import");
+            auto importer = import_dialog->importer();
+            DBG_ASSERT(!!importer, "Import can't be null if we clicked import");
             if (importer) {
                 importer->doImport(
                     source,


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