# HG changeset patch
# Parent 09569d131d549b0bff0c8f3ae6dec5baedeeb667
# User Edouard Gomez <[email protected]>
# Date 1292681372 -3600
photo: Load a default DCP profile on dcp attr access

Try to load a default DCP profile when accessing the dcp attribute
and no profile has been set for the photo neither from
cache file or GUI selector.

diff --git a/librawstudio/rs-profile-factory.c 
b/librawstudio/rs-profile-factory.c
--- a/librawstudio/rs-profile-factory.c
+++ b/librawstudio/rs-profile-factory.c
@@ -237,8 +237,8 @@
        return filter;
 }
 
-RSDcpFile *
-rs_profile_factory_find_from_id(RSProfileFactory *factory, const gchar *id)
+static inline RSDcpFile *
+rs_profile_factory_find_from_column(RSProfileFactory *factory, const gchar 
*id, int column)
 {
        RSDcpFile *ret = NULL;
        RSDcpFile *dcp;
@@ -248,9 +248,7 @@
 
        if (gtk_tree_model_get_iter_first(treemodel, &iter))
                do {
-                       gtk_tree_model_get(treemodel, &iter,
-                               FACTORY_MODEL_COLUMN_ID, &model_id,
-                               -1);
+                       gtk_tree_model_get(treemodel, &iter, column, &model_id, 
-1);
 
                        if (id && model_id && g_str_equal(id, model_id))
                        {
@@ -270,6 +268,18 @@
        return ret;
 }
 
+RSDcpFile *
+rs_profile_factory_find_from_id(RSProfileFactory *factory, const gchar *id)
+{
+       return rs_profile_factory_find_from_column(factory, id, 
FACTORY_MODEL_COLUMN_ID);
+}
+
+RSDcpFile *
+rs_profile_factory_find_from_model(RSProfileFactory *factory, const gchar *id)
+{
+       return rs_profile_factory_find_from_column(factory, id, 
FACTORY_MODEL_COLUMN_MODEL);
+}
+
 void 
 rs_profile_factory_set_embedded_profile(RSProfileFactory *factory, const 
RSIccProfile *profile)
 {
diff --git a/librawstudio/rs-profile-factory.h 
b/librawstudio/rs-profile-factory.h
--- a/librawstudio/rs-profile-factory.h
+++ b/librawstudio/rs-profile-factory.h
@@ -67,6 +67,8 @@
 
 RSDcpFile *rs_profile_factory_find_from_id(RSProfileFactory *factory, const 
gchar *path);
 
+RSDcpFile *rs_profile_factory_find_from_model(RSProfileFactory *factory, const 
gchar *id);
+
 void rs_profile_factory_set_embedded_profile(RSProfileFactory *factory, const 
RSIccProfile *profile);
 
 G_END_DECLS
diff --git a/src/rs-photo.c b/src/rs-photo.c
--- a/src/rs-photo.c
+++ b/src/rs-photo.c
@@ -22,6 +22,8 @@
 #include "rs-photo.h"
 #include "rs-cache.h"
 #include "rs-camera-db.h"
+#include "rs-profile-factory.h"
+#include "rs-profile-camera.h"
 
 static void rs_photo_class_init (RS_PHOTOClass *klass);
 
@@ -437,6 +439,33 @@
 {
        g_assert(RS_IS_PHOTO(photo));
 
+       if (photo->dcp)
+       {
+               return photo->dcp;
+       }
+
+       if (photo->metadata && photo->metadata->model_ascii)
+       {
+               RSProfileFactory *factory = rs_profile_factory_new_default();
+               const gchar* unique_id = NULL;
+               RSDcpFile* dcp = NULL;
+
+               if (photo->metadata->make_ascii)
+                       unique_id = 
rs_profile_camera_find(photo->metadata->make_ascii, 
photo->metadata->model_ascii);
+
+               if (unique_id)
+               {
+                       dcp = rs_profile_factory_find_from_model(factory, 
unique_id);
+                       g_free((void*)unique_id);
+               }
+               else
+               {
+                       dcp = rs_profile_factory_find_from_model(factory, 
photo->metadata->model_ascii);
+               }
+               if (dcp)
+                       rs_photo_set_dcp_profile(photo, dcp);
+       }
+
        return photo->dcp;
 }
 

-- 
Edouard Gomez

_______________________________________________
Rawstudio-dev mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-dev

Reply via email to