# 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