52
static gboolean init=FALSE;
54
LIBXML_TEST_VERSION /* yep, it should look like this */
60
55
rs_cache_save(RS_PHOTO *photo)
63
58
xmlTextWriterPtr writer;
66
if(!photo->active) return;
67
61
cachename = rs_cache_get_name(photo->filename);
68
62
if (!cachename) return;
69
63
writer = xmlNewTextWriterFilename(cachename, 0); /* fixme, check for errors */
64
xmlTextWriterSetIndent(writer, 1);
70
65
xmlTextWriterStartDocument(writer, NULL, "ISO-8859-1", NULL);
71
66
xmlTextWriterStartElement(writer, BAD_CAST "rawstudio-cache");
67
xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "version", "%d", CACHEVERSION);
72
68
xmlTextWriterWriteFormatElement(writer, BAD_CAST "priority", "%d",
71
xmlTextWriterWriteFormatElement(writer, BAD_CAST "exported", "yes");
74
72
xmlTextWriterWriteFormatElement(writer, BAD_CAST "orientation", "%d",
75
73
photo->orientation);
74
xmlTextWriterWriteFormatElement(writer, BAD_CAST "angle", "%f",
78
xmlTextWriterWriteFormatElement(writer, BAD_CAST "crop", "%d %d %d %d",
79
photo->crop->x1, photo->crop->y1,
80
photo->crop->x2, photo->crop->y2);
76
82
for(id=0;id<3;id++)
78
84
xmlTextWriterStartElement(writer, BAD_CAST "settings");
89
95
photo->settings[id]->warmth);
90
96
xmlTextWriterWriteFormatElement(writer, BAD_CAST "tint", "%f",
91
97
photo->settings[id]->tint);
98
xmlTextWriterWriteFormatElement(writer, BAD_CAST "sharpen", "%f",
99
photo->settings[id]->sharpen);
100
if (photo->settings[id]->curve_nknots > 0)
102
xmlTextWriterStartElement(writer, BAD_CAST "curve");
103
xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "num", "%d", photo->settings[id]->curve_nknots);
104
for(i=0;i<photo->settings[id]->curve_nknots;i++)
105
xmlTextWriterWriteFormatElement(writer, BAD_CAST "knot", "%f %f",
106
photo->settings[id]->curve_knots[i*2+0],
107
photo->settings[id]->curve_knots[i*2+1]);
108
xmlTextWriterEndElement(writer);
92
110
xmlTextWriterEndElement(writer);
94
112
xmlTextWriterEndDocument(writer);
117
136
target = &rss->warmth;
118
137
else if ((!xmlStrcmp(cur->name, BAD_CAST "tint")))
119
138
target = &rss->tint;
139
else if ((!xmlStrcmp(cur->name, BAD_CAST "sharpen")))
140
target = &rss->sharpen;
141
else if ((!xmlStrcmp(cur->name, BAD_CAST "curve")))
147
val = xmlGetProp(cur, BAD_CAST "num");
149
num = atoi((gchar *) val);
153
rss->curve_knots = g_new(gfloat, 2*num);
154
rss->curve_nknots = 0;
155
curve = cur->xmlChildrenNode;
158
if ((!xmlStrcmp(curve->name, BAD_CAST "knot")))
160
val = xmlNodeListGetString(doc, curve->xmlChildrenNode, 1);
161
vals = g_strsplit((gchar *)val, " ", 4);
162
if (vals[0] && vals[1])
164
x = g_strtod(vals[0], NULL);
165
y = g_strtod(vals[1], NULL);
166
rss->curve_knots[rss->curve_nknots*2+0] = x;
167
rss->curve_knots[rss->curve_nknots*2+1] = y;
137
194
gchar *cachename;
197
RS_SETTINGS_DOUBLE *settings;
140
199
cachename = rs_cache_get_name(photo->filename);
141
200
if (!cachename) return(FALSE);
142
201
if (!g_file_test(cachename, G_FILE_TEST_IS_REGULAR)) return FALSE;
202
photo->exported = FALSE;
143
203
doc = xmlParseFile(cachename);
144
204
if(doc==NULL) return(FALSE);
146
206
cur = xmlDocGetRootElement(doc);
208
if ((!xmlStrcmp(cur->name, BAD_CAST "rawstudio-cache")))
210
val = xmlGetProp(cur, BAD_CAST "version");
212
version = atoi((gchar *) val);
148
215
cur = cur->xmlChildrenNode;
169
239
photo->orientation = atoi((gchar *) val);
242
else if ((!xmlStrcmp(cur->name, BAD_CAST "angle")))
244
val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
245
photo->angle = g_strtod((gchar *) val, NULL);
248
else if ((!xmlStrcmp(cur->name, BAD_CAST "exported")))
250
val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
251
if (g_ascii_strcasecmp((gchar *) val, "yes")==0)
252
photo->exported = TRUE;
255
else if ((!xmlStrcmp(cur->name, BAD_CAST "crop")))
257
RS_RECT *crop = g_new0(RS_RECT, 1);
260
val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
261
vals = g_strsplit((gchar *)val, " ", 4);
264
crop->x1 = atoi((gchar *) vals[0]);
267
crop->y1 = atoi((gchar *) vals[1]);
270
crop->x2 = atoi((gchar *) vals[2]);
272
crop->y2 = atoi((gchar *) vals[3]);
277
/* If crop was done before demosaic was implemented, we should
278
double the dimensions */
287
rs_photo_set_crop(photo, crop);
176
296
g_free(cachename);
181
rs_cache_load_quick(const gchar *filename, gint *priority)
301
rs_cache_load_quick(const gchar *filename, gint *priority, gboolean *exported)
186
306
gchar *cachename;
188
311
cachename = rs_cache_get_name(filename);
189
if (!cachename) return;
190
if (!g_file_test(cachename, G_FILE_TEST_IS_REGULAR)) return;
316
if (!g_file_test(cachename, G_FILE_TEST_IS_REGULAR))
191
322
doc = xmlParseFile(cachename);
192
if(doc==NULL) return;
328
if (exported) *exported = FALSE;
194
330
cur = xmlDocGetRootElement(doc);
196
332
cur = cur->xmlChildrenNode;
199
if ((!xmlStrcmp(cur->name, BAD_CAST "priority")))
335
if (priority && (!xmlStrcmp(cur->name, BAD_CAST "priority")))
201
337
val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
202
338
*priority = atoi((gchar *) val);
341
if (exported && (!xmlStrcmp(cur->name, BAD_CAST "exported")))
343
val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
344
if (g_ascii_strcasecmp((gchar *) val, "yes")==0)
356
rs_cache_save_flags(const gchar *filename, const guint *priority, const gboolean *exported)
360
g_assert(filename != NULL);
362
if (!(priority || exported)) return;
364
/* Aquire a "fake" RS_PHOTO */
365
photo = rs_photo_new();
366
photo->filename = (gchar *) filename;
368
if (rs_cache_load(photo))
370
/* If we got a cache file, save as normal */
372
photo->priority = *priority;
374
photo->exported = *exported;
375
rs_cache_save(photo);
379
/* If we're creating a new file, only save what we know */
380
xmlTextWriterPtr writer;
381
gchar *cachename = rs_cache_get_name(photo->filename);
385
writer = xmlNewTextWriterFilename(cachename, 0); /* fixme, check for errors */
388
xmlTextWriterStartDocument(writer, NULL, "ISO-8859-1", NULL);
389
xmlTextWriterStartElement(writer, BAD_CAST "rawstudio-cache");
392
xmlTextWriterWriteFormatElement(writer, BAD_CAST "priority", "%d",
395
if (exported && *exported)
396
xmlTextWriterWriteFormatElement(writer, BAD_CAST "exported", "yes");
398
xmlTextWriterEndDocument(writer);
399
xmlFreeTextWriter(writer);
404
photo->filename = NULL;
405
g_object_unref(photo);