[niepce] Implement "Write Metadata"



commit 2df2029507208b892b51eeb5193fa652366e3126
Author: Hubert Figuière <hub figuiere net>
Date:   Thu Jun 20 00:59:16 2013 -0400

    Implement "Write Metadata"

 src/engine/db/library.cpp             |    4 ++++
 src/engine/db/library.hpp             |    1 +
 src/engine/library/commands.cpp       |    6 ++++++
 src/engine/library/commands.hpp       |    4 +++-
 src/libraryclient/clientimpl.cpp      |    9 +++++++++
 src/libraryclient/clientimpl.hpp      |    2 ++
 src/libraryclient/libraryclient.cpp   |    8 +++++++-
 src/libraryclient/libraryclient.hpp   |    1 +
 src/niepce/ui/moduleshell.cpp         |   12 ++++++++++--
 src/niepce/ui/selectioncontroller.cpp |    8 ++++++++
 src/niepce/ui/selectioncontroller.hpp |    2 ++
 11 files changed, 53 insertions(+), 4 deletions(-)
---
diff --git a/src/engine/db/library.cpp b/src/engine/db/library.cpp
index 2ab46f0..ae5e78a 100644
--- a/src/engine/db/library.cpp
+++ b/src/engine/db/library.cpp
@@ -783,6 +783,10 @@ bool Library::setMetaData(library_id_t file_id, fwk::PropertyIndex meta,
     return retval;
 }
 
+bool Library::writeMetaData(library_id_t file_id)
+{
+    return rewriteXmpForId(file_id, true);
+}
 
 bool Library::moveFileToFolder(library_id_t file_id, library_id_t folder_id)
 {
diff --git a/src/engine/db/library.hpp b/src/engine/db/library.hpp
index e4de6ad..c4225df 100644
--- a/src/engine/db/library.hpp
+++ b/src/engine/db/library.hpp
@@ -167,6 +167,7 @@ public:
     bool setMetaData(library_id_t file_id, const LibMetadata::Ptr & );
     bool setMetaData(library_id_t file_id, fwk::PropertyIndex meta,
                      const fwk::PropertyValue & value);
+    bool writeMetaData(library_id_t file_id);
 
     bool moveFileToFolder(library_id_t file_id, library_id_t folder_id);
 
diff --git a/src/engine/library/commands.cpp b/src/engine/library/commands.cpp
index 7d7c0fa..b7fd629 100644
--- a/src/engine/library/commands.cpp
+++ b/src/engine/library/commands.cpp
@@ -125,6 +125,12 @@ void Commands::cmdSetMetadata(const Library::Ptr & lib,
     lib->notify(Library::NOTIFY_METADATA_CHANGED, boost::any(m));
 }
 
+void Commands::cmdWriteMetadata(const Library::Ptr & lib,
+                                 library_id_t file_id)
+{
+    lib->writeMetaData(file_id);
+}
+
 void Commands::cmdMoveFileToFolder(const Library::Ptr & lib, 
                                    library_id_t file_id, library_id_t from_folder_id,
                                    library_id_t to_folder_id)
diff --git a/src/engine/library/commands.hpp b/src/engine/library/commands.hpp
index 7db756c..f670508 100644
--- a/src/engine/library/commands.hpp
+++ b/src/engine/library/commands.hpp
@@ -1,7 +1,7 @@
 /*
  * niepce - engine/library/commands.hpp
  *
- * Copyright (C) 2007-2009 Hubert Figuiere
+ * Copyright (C) 2007-2013 Hubert Figuiere
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -54,6 +54,8 @@ public:
     static void cmdSetMetadata(const Library::Ptr & lib,
                                library_id_t file_id, fwk::PropertyIndex meta, 
                                const fwk::PropertyValue & value);
+    static void cmdWriteMetadata(const Library::Ptr & lib,
+                                 library_id_t file_id);
     static void cmdMoveFileToFolder(const Library::Ptr & lib, 
                                     library_id_t file_id, library_id_t from_folder_id,
                                     library_id_t to_folder_id);
diff --git a/src/libraryclient/clientimpl.cpp b/src/libraryclient/clientimpl.cpp
index acfcddd..c106456 100644
--- a/src/libraryclient/clientimpl.cpp
+++ b/src/libraryclient/clientimpl.cpp
@@ -127,6 +127,15 @@ tid_t ClientImpl::setMetadata(eng::library_id_t file_id, int meta,
     return id;
 }
 
+tid_t ClientImpl::write_metadata(eng::library_id_t file_id)
+{
+    tid_t id = LibraryClient::newTid();
+    Op::Ptr op(new Op(id, std::bind(&Commands::cmdWriteMetadata, _1,
+                                    file_id)));
+    m_localLibrary->schedule(op);
+    return id;
+}
+
 tid_t ClientImpl::moveFileToFolder(eng::library_id_t file_id,
                                    eng::library_id_t from_folder_id,
                                    eng::library_id_t to_folder_id)
diff --git a/src/libraryclient/clientimpl.hpp b/src/libraryclient/clientimpl.hpp
index 55ad388..ffba6de 100644
--- a/src/libraryclient/clientimpl.hpp
+++ b/src/libraryclient/clientimpl.hpp
@@ -49,6 +49,8 @@ public:
     eng::tid_t requestMetadata(eng::library_id_t id);
     eng::tid_t setMetadata(eng::library_id_t id, int meta,
                            const fwk::PropertyValue & value);
+    eng::tid_t write_metadata(eng::library_id_t file_id);
+
     eng::tid_t moveFileToFolder(eng::library_id_t file_id,
                                 eng::library_id_t from_folder_id,
                                 eng::library_id_t to_folder_id);
diff --git a/src/libraryclient/libraryclient.cpp b/src/libraryclient/libraryclient.cpp
index 178592f..114be43 100644
--- a/src/libraryclient/libraryclient.cpp
+++ b/src/libraryclient/libraryclient.cpp
@@ -1,7 +1,7 @@
 /*
  * niepce - libraryclient/libraryclient.cpp
  *
- * Copyright (C) 2007-2009 Hubert Figuiere
+ * Copyright (C) 2007-2013 Hubert Figuiere
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -97,6 +97,12 @@ eng::tid_t LibraryClient::setMetadata(library_id_t id, fwk::PropertyIndex meta,
     return m_pImpl->setMetadata(id, meta, value);
 }
 
+eng::tid_t LibraryClient::write_metadata(eng::library_id_t id)
+{
+    return m_pImpl->write_metadata(id);
+}
+
+
 eng::tid_t LibraryClient::moveFileToFolder(eng::library_id_t file_id, eng::library_id_t from_folder,
                                            eng::library_id_t to_folder)
 {
diff --git a/src/libraryclient/libraryclient.hpp b/src/libraryclient/libraryclient.hpp
index 2811273..8e18f4d 100644
--- a/src/libraryclient/libraryclient.hpp
+++ b/src/libraryclient/libraryclient.hpp
@@ -70,6 +70,7 @@ public:
     eng::tid_t setMetadata(eng::library_id_t id, fwk::PropertyIndex meta, const fwk::PropertyValue & value);
     eng::tid_t moveFileToFolder(eng::library_id_t file_id, eng::library_id_t from_folder,
                                 eng::library_id_t to_folder);
+    eng::tid_t write_metadata(eng::library_id_t file_id);
     
     /** get all the labels */
     eng::tid_t getAllLabels();
diff --git a/src/niepce/ui/moduleshell.cpp b/src/niepce/ui/moduleshell.cpp
index 5f3c21b..b39b4db 100644
--- a/src/niepce/ui/moduleshell.cpp
+++ b/src/niepce/ui/moduleshell.cpp
@@ -130,7 +130,8 @@ Gtk::Widget * ModuleShell::buildWidget(const Glib::RefPtr<Gtk::UIManager> & mana
                            5));
 
     m_actionGroup->add(Gtk::Action::create("SetFlag", _("Set _Flag")));
-    m_actionGroup->add(Gtk::Action::create("SetFlagReject", _("Flag as _Rejected")),
+    m_actionGroup->add(Gtk::Action::create("SetFlagReject",
+                                           _("Flag as _Rejected")),
                           Gtk::AccelKey("x"), sigc::bind(
                               sigc::mem_fun(*m_selection_controller,
                                             &SelectionController::set_flag),
@@ -148,6 +149,11 @@ Gtk::Widget * ModuleShell::buildWidget(const Glib::RefPtr<Gtk::UIManager> & mana
 
     m_actionGroup->add(Gtk::Action::create("DeleteImage", Gtk::Stock::DELETE));
 
+    m_actionGroup->add(Gtk::Action::create("WriteMetadata",
+                                           _("Write metadata")),
+                       sigc::mem_fun(*m_selection_controller,
+                                     &SelectionController::write_metadata));
+
     manager->insert_action_group(m_actionGroup);
 
 
@@ -159,7 +165,7 @@ Gtk::Widget * ModuleShell::buildWidget(const Glib::RefPtr<Gtk::UIManager> & mana
         "      <menuitem action='NextImage'/>"
         "      <separator/>"
         "      <menuitem action='RotateLeft'/>"
-        "      <menuitem action='RotateRight'/>"                       
+        "      <menuitem action='RotateRight'/>"
         "      <separator/>"
         "      <menu action='SetRating'>"
         "        <menuitem action='SetRating0'/>"
@@ -183,6 +189,8 @@ Gtk::Widget * ModuleShell::buildWidget(const Glib::RefPtr<Gtk::UIManager> & mana
         "      </menu>"
         "      <separator/>"
         "      <menuitem action='DeleteImage'/>"
+        "      <separator/>"
+        "      <menuitem action='WriteMetadata'/>"
         "    </menu>"
         "  </menubar>"
         "</ui>";
diff --git a/src/niepce/ui/selectioncontroller.cpp b/src/niepce/ui/selectioncontroller.cpp
index b158355..8f2e7c7 100644
--- a/src/niepce/ui/selectioncontroller.cpp
+++ b/src/niepce/ui/selectioncontroller.cpp
@@ -278,6 +278,14 @@ void SelectionController::set_properties(const fwk::PropertyBag & props,
     }
 }
 
+void SelectionController::write_metadata()
+{
+    eng::library_id_t selection = get_selection();
+    if(selection >= 0) {
+         getLibraryClient()->write_metadata(selection);
+    }
+}
+
 void SelectionController::move_to_trash()
 {
     eng::library_id_t trash_folder = getLibraryClient()->trash_id();
diff --git a/src/niepce/ui/selectioncontroller.hpp b/src/niepce/ui/selectioncontroller.hpp
index 2d2d57b..a258628 100644
--- a/src/niepce/ui/selectioncontroller.hpp
+++ b/src/niepce/ui/selectioncontroller.hpp
@@ -96,6 +96,8 @@ public:
     void set_properties(const fwk::PropertyBag & props, 
                         const fwk::PropertyBag & old);
 
+    /** Write the file(s) metadata to disk. */
+    void write_metadata();
     void move_to_trash();
 
     /** get the current selection 


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