[niepce: 11/12] importer: move the import mechanics into the importer.



commit 100898b320ad933ef9b26c3648865bdda186ac09
Author: Hubert Figuière <hub figuiere net>
Date:   Wed Oct 21 11:05:44 2015 -0400

    importer: move the import mechanics into the importer.

 src/engine/importer/directoryimporter.cpp |   12 +++++++++++-
 src/engine/importer/directoryimporter.hpp |    3 ++-
 src/engine/importer/iimporter.hpp         |    8 ++++++++
 src/niepce/ui/dialogs/importdialog.hpp    |    3 ++-
 src/niepce/ui/niepcewindow.cpp            |   13 ++++++++++---
 5 files changed, 33 insertions(+), 6 deletions(-)
---
diff --git a/src/engine/importer/directoryimporter.cpp b/src/engine/importer/directoryimporter.cpp
index 3e0189e..dfeb25b 100644
--- a/src/engine/importer/directoryimporter.cpp
+++ b/src/engine/importer/directoryimporter.cpp
@@ -19,7 +19,7 @@
 
 #include <glibmm/i18n.h>
 
-#include "fwk/utils/files.hpp"
+#include "fwk/base/debug.hpp"
 #include "fwk/utils/pathutils.hpp"
 #include "engine/importer/directoryimporter.hpp"
 #include "engine/importer/importedfile.hpp"
@@ -82,4 +82,14 @@ std::list<ImportedFile::Ptr> DirectoryImporter::getSourceContent()
   return content;
 }
 
+bool DirectoryImporter::doImport(const std::string & source,
+                                 const file_importer & importer)
+{
+  // pretty trivial, we have the source path.
+  importer(source, false);
+
+  // XXX return a real error
+  return true;
+}
+
 }
diff --git a/src/engine/importer/directoryimporter.hpp b/src/engine/importer/directoryimporter.hpp
index 6be63fd..0a31226 100644
--- a/src/engine/importer/directoryimporter.hpp
+++ b/src/engine/importer/directoryimporter.hpp
@@ -38,7 +38,8 @@ public:
 
   bool listSourceContent(const std::string & source) override;
   std::list<ImportedFile::Ptr> getSourceContent() override;
-
+  bool doImport(const std::string & source,
+                const file_importer & importer) override;
 private:
   std::mutex m_content_lock;
   std::list<ImportedFile::Ptr> m_content;
diff --git a/src/engine/importer/iimporter.hpp b/src/engine/importer/iimporter.hpp
index 29d2f28..f75bd12 100644
--- a/src/engine/importer/iimporter.hpp
+++ b/src/engine/importer/iimporter.hpp
@@ -31,6 +31,9 @@ class IImporter {
 public:
   virtual ~IImporter() {}
 
+  /** file importer callback */
+  typedef std::function<void (const std::string&, bool)> file_importer;
+
   /** User visible importer name. */
   virtual std::string name() const = 0;
 
@@ -39,6 +42,11 @@ public:
 
   /** get the source content. */
   virtual std::list<ImportedFile::Ptr> getSourceContent() = 0;
+
+  /** perform import from source */
+  virtual bool doImport(const std::string & source,
+                        const file_importer & importer) = 0;
+
 };
 
 }
diff --git a/src/niepce/ui/dialogs/importdialog.hpp b/src/niepce/ui/dialogs/importdialog.hpp
index 86c2f3e..6841938 100644
--- a/src/niepce/ui/dialogs/importdialog.hpp
+++ b/src/niepce/ui/dialogs/importdialog.hpp
@@ -77,7 +77,8 @@ public:
     const Glib::ustring & sourcePath() const
         { return m_folder_path_source; }
     void setToImport(const Glib::ustring & f);
-
+    eng::IImporter* importer() const
+        { return m_importer; }
 private:
     class ImportParam;
 
diff --git a/src/niepce/ui/niepcewindow.cpp b/src/niepce/ui/niepcewindow.cpp
index 9bd39fc..0a5eb3c 100644
--- a/src/niepce/ui/niepcewindow.cpp
+++ b/src/niepce/ui/niepcewindow.cpp
@@ -39,6 +39,7 @@
 #include "fwk/toolkit/configdatabinder.hpp"
 #include "fwk/toolkit/undo.hpp"
 #include "engine/db/library.hpp"
+#include "engine/importer/iimporter.hpp"
 #include "libraryclient/uidataprovider.hpp"
 
 #include "thumbstripview.hpp"
@@ -260,9 +261,15 @@ void NiepceWindow::on_action_file_import()
         if(!source.empty()) {
             cfg.setValue("last_import_location", source);
 
-            // XXX actually use the import module associated.
-            //DBG_OUT("%s", source.c_str());
-            m_libClient->importFromDirectory(source, false);
+            eng::IImporter* importer = import_dialog->importer();
+            DBG_ASSERT(importer, "Import can't be null if we clicked import");
+            if (importer) {
+                importer->doImport(
+                    source,
+                    [this] (const std::string & path, bool manage) {
+                        m_libClient->importFromDirectory(path, manage);
+                    });
+            }
         }
         break;
     }


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