annotate src/filefilter.c @ 1532:fffb62c7ba1e

Add pgettext for some ambiguous strings There are some strings which are ambiguous to translate. There is the pgettext function to solf that problem. For example, locations can be translated to german by Ortsangaben (geographical) or by Pfad (filesystem). I am sure there are also some ambiguous in other languages.
author mow
date Fri, 10 Apr 2009 09:47:20 +0000
parents 1b2ddc6b2b27
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
1 /*
196
f6e307c7bad6 rename GQview -> Geeqie over the code
nadvornik
parents: 188
diff changeset
2 * Geeqie
79
528e3432e0c0 Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents: 53
diff changeset
3 * (C) 2006 John Ellis
1284
8b89e3ff286b Add year 2009 to copyright info everywhere.
zas_
parents: 1239
diff changeset
4 * Copyright (C) 2008 - 2009 The Geeqie Team
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
5 *
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
6 * Author: John Ellis
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
7 *
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
8 * This software is released under the GNU General Public License (GNU GPL).
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
9 * Please read the included file COPYING for more information.
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
10 * This software comes with no warranty of any kind, use at your own risk!
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
11 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
12
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
13
281
9995c5fb202a gqview.h -> main.h
zas_
parents: 277
diff changeset
14 #include "main.h"
586
905688aa2317 split filelist.c to filefilter.c and filedata.c
nadvornik
parents: 576
diff changeset
15 #include "filefilter.h"
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
16
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
17 #include "cache.h"
1023
650c02c0c8ff Move quoted_value() and escquote_value() to misc.[ch].
zas_
parents: 781
diff changeset
18 #include "misc.h"
307
667e49f52168 Move secure save code to its own files: secure_save.{c,h}.
zas_
parents: 283
diff changeset
19 #include "secure_save.h"
79
528e3432e0c0 Thu Oct 19 07:23:37 2006 John Ellis <johne@verizon.net>
gqview
parents: 53
diff changeset
20 #include "thumb_standard.h"
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
21 #include "ui_fileops.h"
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
22 #include "rcfile.h"
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
23
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
24 /*
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
25 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
26 * file filtering
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
27 *-----------------------------------------------------------------------------
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
28 */
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
29
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
30 static GList *filter_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
31 static GList *extension_list = NULL;
145
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
32 static GList *sidecar_ext_list = NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
33
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
34 static GList *file_class_extension_list[FILE_FORMAT_CLASSES];
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
35
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
36 static GList *file_writable_list = NULL; /* writable files */
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
37 static GList *file_sidecar_list = NULL; /* files with allowed sidecar */
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
38
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
39
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
40 static FilterEntry *filter_entry_new(const gchar *key, const gchar *description,
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
41 const gchar *extensions, FileFormatClass file_class,
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
42 gboolean writable, gboolean allow_sidecar, gboolean enabled)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
43 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
44 FilterEntry *fe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
45
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
46 fe = g_new0(FilterEntry, 1);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
47 fe->key = g_strdup(key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
48 fe->description = g_strdup(description);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
49 fe->extensions = g_strdup(extensions);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
50 fe->enabled = enabled;
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
51 fe->file_class = file_class;
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
52 fe->writable = writable;
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
53 fe->allow_sidecar = allow_sidecar;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 425
diff changeset
54
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
55 return fe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
56 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
57
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
58 static void filter_entry_free(FilterEntry *fe)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
59 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
60 if (!fe) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
61
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
62 g_free(fe->key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
63 g_free(fe->description);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
64 g_free(fe->extensions);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
65 g_free(fe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
66 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
67
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
68 GList *filter_get_list(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
69 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
70 return filter_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
71 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
72
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
73 void filter_remove_entry(FilterEntry *fe)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
74 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
75 if (!g_list_find(filter_list, fe)) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
76
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
77 filter_list = g_list_remove(filter_list, fe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
78 filter_entry_free(fe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
79 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
80
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
81 static FilterEntry *filter_get_by_key(const gchar *key)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
82 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
83 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
84
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
85 if (!key) return NULL;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
86
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
87 work = filter_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
88 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
89 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
90 FilterEntry *fe = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
91 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
92
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
93 if (strcmp(fe->key, key) == 0) return fe;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
94 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
95
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
96 return NULL;
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
97 }
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
98
1424
0061979f7f6d Use gboolean where applicable.
zas_
parents: 1423
diff changeset
99 static gboolean filter_key_exists(const gchar *key)
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
100 {
1424
0061979f7f6d Use gboolean where applicable.
zas_
parents: 1423
diff changeset
101 return (filter_get_by_key(key) != NULL);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
102 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
103
1424
0061979f7f6d Use gboolean where applicable.
zas_
parents: 1423
diff changeset
104 void filter_add(const gchar *key, const gchar *description, const gchar *extensions, FileFormatClass file_class, gboolean writable, gboolean allow_sidecar, gboolean enabled)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
105 {
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
106 filter_list = g_list_append(filter_list, filter_entry_new(key, description, extensions, file_class, writable, allow_sidecar, enabled));
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
107 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
108
1424
0061979f7f6d Use gboolean where applicable.
zas_
parents: 1423
diff changeset
109 void filter_add_unique(const gchar *description, const gchar *extensions, FileFormatClass file_class, gboolean writable, gboolean allow_sidecar, gboolean enabled)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
110 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
111 gchar *key;
736
a7289f9e8d29 Fix signed vs unsigned warnings.
zas_
parents: 673
diff changeset
112 guint n;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
113
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
114 key = g_strdup("user0");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
115 n = 1;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
116 while (filter_key_exists(key))
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
117 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
118 g_free(key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
119 if (n > 999) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
120 key = g_strdup_printf("user%d", n);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
121 n++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
122 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
123
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
124 filter_add(key, description, extensions, file_class, writable, allow_sidecar, enabled);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
125 g_free(key);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
126 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
127
1424
0061979f7f6d Use gboolean where applicable.
zas_
parents: 1423
diff changeset
128 static void filter_add_if_missing(const gchar *key, const gchar *description, const gchar *extensions, FileFormatClass file_class, gboolean writable, gboolean allow_sidecar, gboolean enabled)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
129 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
130 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
131
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
132 if (!key) return;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
133
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
134 work = filter_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
135 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
136 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
137 FilterEntry *fe = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
138 work = work->next;
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
139 if (fe->key && strcmp(fe->key, key) == 0)
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
140 {
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
141 if (fe->file_class == FORMAT_CLASS_UNKNOWN)
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
142 fe->file_class = file_class; /* for compatibility */
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
143
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
144 if (fe->writable && fe->allow_sidecar)
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
145 {
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
146 fe->writable = writable;
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
147 fe->allow_sidecar = allow_sidecar;
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
148 }
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
149 return;
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
150 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
151 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
152
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
153 filter_add(key, description, extensions, file_class, writable, allow_sidecar, enabled);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
154 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
155
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
156 void filter_reset(void)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
157 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
158 GList *work;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
159
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
160 work = filter_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
161 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
162 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
163 FilterEntry *fe = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
164 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
165 filter_entry_free(fe);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
166 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
167
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
168 g_list_free(filter_list);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
169 filter_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
170 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
171
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
172 void filter_add_defaults(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
173 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
174 GSList *list, *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
175
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
176 list = gdk_pixbuf_get_formats();
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
177 work = list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
178 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
179 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
180 GdkPixbufFormat *format;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
181 gchar *name;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
182 gchar *desc;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
183 gchar **extensions;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
184 GString *filter = NULL;
736
a7289f9e8d29 Fix signed vs unsigned warnings.
zas_
parents: 673
diff changeset
185 guint i;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 425
diff changeset
186
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
187 format = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
188 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
189
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
190 name = gdk_pixbuf_format_get_name(format);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
191 desc = gdk_pixbuf_format_get_description(format);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
192 extensions = gdk_pixbuf_format_get_extensions(format);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
193
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
194 i = 0;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
195 while (extensions[i])
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
196 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
197 if (!filter)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
198 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
199 filter = g_string_new(".");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
200 filter = g_string_append(filter, extensions[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
201 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
202 else
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
203 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
204 filter = g_string_append(filter, ";.");
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
205 filter = g_string_append(filter, extensions[i]);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
206 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
207 i++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
208 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
209
506
fc9c8a3e1a8b Handle the newline in DEBUG_N() macro instead of adding one
zas_
parents: 495
diff changeset
210 DEBUG_1("loader reported [%s] [%s] [%s]", name, desc, filter->str);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
211
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
212 filter_add_if_missing(name, desc, filter->str, FORMAT_CLASS_IMAGE, TRUE, FALSE, TRUE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
213
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
214 g_free(name);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
215 g_free(desc);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
216 g_strfreev(extensions);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
217 g_string_free(filter, TRUE);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
218 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
219 g_slist_free(list);
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
220
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
221 /* add defaults even if gdk-pixbuf does not have them, but disabled */
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
222 filter_add_if_missing("jpeg", "JPEG group", ".jpg;.jpeg;.jpe", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
223 filter_add_if_missing("png", "Portable Network Graphic", ".png", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
224 filter_add_if_missing("tiff", "Tiff", ".tif;.tiff", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
225 filter_add_if_missing("pnm", "Packed Pixel formats", ".pbm;.pgm;.pnm;.ppm", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
226 filter_add_if_missing("gif", "Graphics Interchange Format", ".gif", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
227 filter_add_if_missing("xbm", "X bitmap", ".xbm", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
228 filter_add_if_missing("xpm", "X pixmap", ".xpm", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
229 filter_add_if_missing("bmp", "Bitmap", ".bmp", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
230 filter_add_if_missing("ico", "Icon file", ".ico;.cur", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
231 filter_add_if_missing("ras", "Raster", ".ras", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
232 filter_add_if_missing("svg", "Scalable Vector Graphics", ".svg", FORMAT_CLASS_IMAGE, TRUE, FALSE, FALSE);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 425
diff changeset
233
202
f95654aeec4b added all possible raw extensions that I could find
nadvornik
parents: 196
diff changeset
234 /* non-image files that might be desirable to show */
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
235 filter_add_if_missing("xmp", "XMP sidecar", ".xmp", FORMAT_CLASS_META, TRUE, FALSE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
236 filter_add_if_missing("gqv", GQ_APPNAME " image collection", GQ_COLLECTION_EXT, FORMAT_CLASS_META, FALSE, FALSE, TRUE);
1486
1b2ddc6b2b27 added UfRaw ID files to known filetypes
nadvornik
parents: 1464
diff changeset
237 filter_add_if_missing("ufraw", "UFRaw ID file", ".ufraw", FORMAT_CLASS_META, FALSE, FALSE, TRUE);
43
ee03f36e9e4b Sun May 15 21:40:26 2005 John Ellis <johne@verizon.net>
gqview
parents: 15
diff changeset
238
ee03f36e9e4b Sun May 15 21:40:26 2005 John Ellis <johne@verizon.net>
gqview
parents: 15
diff changeset
239 /* These are the raw camera formats with embedded jpeg/exif.
202
f95654aeec4b added all possible raw extensions that I could find
nadvornik
parents: 196
diff changeset
240 * (see format_raw.c and/or exiv2.cc)
43
ee03f36e9e4b Sun May 15 21:40:26 2005 John Ellis <johne@verizon.net>
gqview
parents: 15
diff changeset
241 */
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
242 filter_add_if_missing("arw", "Sony raw format", ".arw;.srf;.sr2", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
243 filter_add_if_missing("crw", "Canon raw format", ".crw;.cr2", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
244 filter_add_if_missing("kdc", "Kodak raw format", ".kdc;.dcr;.k25", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
245 filter_add_if_missing("raf", "Fujifilm raw format", ".raf", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
246 filter_add_if_missing("mef", "Mamiya raw format", ".mef;.mos", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
247 filter_add_if_missing("mrw", "Minolta raw format", ".mrw", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
248 filter_add_if_missing("nef", "Nikon raw format", ".nef", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
249 filter_add_if_missing("orf", "Olympus raw format", ".orf", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
250 filter_add_if_missing("pef", "Pentax or Samsung raw format", ".pef;.ptx", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
251 filter_add_if_missing("dng", "Adobe Digital Negative raw format", ".dng", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
252 filter_add_if_missing("x3f", "Sigma raw format", ".x3f", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
253 filter_add_if_missing("raw", "Panasonic raw format", ".raw", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
254 filter_add_if_missing("r3d", "Red raw format", ".r3d", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
255 filter_add_if_missing("3fr", "Hasselblad raw format", ".3fr", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
256 filter_add_if_missing("erf", "Epson raw format", ".erf", FORMAT_CLASS_RAWIMAGE, FALSE, TRUE, TRUE);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
257 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
258
147
b2266996fa83 added possibility to specify prefered file type for external commands
nadvornik
parents: 146
diff changeset
259 GList *filter_to_list(const gchar *extensions)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
260 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
261 GList *list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
262 const gchar *p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
263
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
264 if (!extensions) return NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
265
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
266 p = extensions;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
267 while (*p != '\0')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
268 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
269 const gchar *b;
1235
052f26dbe8cf Silent warnings.
zas_
parents: 1229
diff changeset
270 gchar *ext;
1229
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
271 gint file_class = -1;
736
a7289f9e8d29 Fix signed vs unsigned warnings.
zas_
parents: 673
diff changeset
272 guint l = 0;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
273
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
274 b = p;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
275 while (*p != '\0' && *p != ';')
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
276 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
277 p++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
278 l++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
279 }
1229
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
280
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
281 ext = g_strndup(b, l);
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
282
1307
e8f21b91885d Glibification again.
zas_
parents: 1284
diff changeset
283 if (g_ascii_strcasecmp(ext, "%image") == 0) file_class = FORMAT_CLASS_IMAGE;
e8f21b91885d Glibification again.
zas_
parents: 1284
diff changeset
284 else if (g_ascii_strcasecmp(ext, "%raw") == 0) file_class = FORMAT_CLASS_RAWIMAGE;
e8f21b91885d Glibification again.
zas_
parents: 1284
diff changeset
285 else if (g_ascii_strcasecmp(ext, "%meta") == 0) file_class = FORMAT_CLASS_META;
1229
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
286
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
287 if (file_class == -1)
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
288 {
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
289 list = g_list_append(list, ext);
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
290 }
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
291 else
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
292 {
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
293 list = g_list_concat(list, string_list_copy(file_class_extension_list[file_class]));
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
294 g_free(ext);
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
295 }
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
296
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
297 if (*p == ';') p++;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
298 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
299
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
300 return list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
301 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
302
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
303 void filter_rebuild(void)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
304 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
305 GList *work;
736
a7289f9e8d29 Fix signed vs unsigned warnings.
zas_
parents: 673
diff changeset
306 guint i;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
307
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
308 string_list_free(extension_list);
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
309 extension_list = NULL;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
310
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
311 string_list_free(file_writable_list);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
312 file_writable_list = NULL;
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
313
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
314 string_list_free(file_sidecar_list);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
315 file_sidecar_list = NULL;
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
316
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
317 for (i = 0; i < FILE_FORMAT_CLASSES; i++)
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
318 {
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
319 string_list_free(file_class_extension_list[i]);
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
320 file_class_extension_list[i] = NULL;
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
321 }
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
322
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
323 work = filter_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
324 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
325 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
326 FilterEntry *fe;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
327
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
328 fe = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
329 work = work->next;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
330
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
331 if (fe->enabled)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
332 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
333 GList *ext;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
334
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
335 ext = filter_to_list(fe->extensions);
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
336 if (ext) extension_list = g_list_concat(extension_list, ext);
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 425
diff changeset
337
1177
5a20c47e7a14 Fix up unsigned expression always true/false warnings.
zas_
parents: 1055
diff changeset
338 if (fe->file_class < FILE_FORMAT_CLASSES)
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
339 {
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
340 ext = filter_to_list(fe->extensions);
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
341 if (ext) file_class_extension_list[fe->file_class] = g_list_concat(file_class_extension_list[fe->file_class], ext);
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
342 }
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
343 else
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
344 {
673
fbebf5cf4a55 Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents: 671
diff changeset
345 log_printf("WARNING: invalid file class %d\n", fe->file_class);
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
346 }
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
347
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
348 if (fe->writable)
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
349 {
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
350 ext = filter_to_list(fe->extensions);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
351 if (ext) file_writable_list = g_list_concat(file_writable_list, ext);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
352 }
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
353
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
354 if (fe->allow_sidecar)
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
355 {
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
356 ext = filter_to_list(fe->extensions);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
357 if (ext) file_sidecar_list = g_list_concat(file_sidecar_list, ext);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
358 }
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
359
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
360 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
361 }
1229
878718372aca sidecar files grouping was made case-insensitive
nadvornik
parents: 1207
diff changeset
362
1327
15208b140481 quoted_value is no longer needed
nadvornik
parents: 1315
diff changeset
363 sidecar_ext_parse(options->sidecar.ext); /* this must be updated after changed file extensions */
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
364 }
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
365
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
366 static gboolean filter_name_find(GList *filter, const gchar *name)
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
367 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
368 GList *work;
736
a7289f9e8d29 Fix signed vs unsigned warnings.
zas_
parents: 673
diff changeset
369 guint ln;
215
f2b439c7f973 Move strlen() calls outside the while loop.
zas_
parents: 212
diff changeset
370
f2b439c7f973 Move strlen() calls outside the while loop.
zas_
parents: 212
diff changeset
371 ln = strlen(name);
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
372 work = filter;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
373 while (work)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
374 {
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
375 gchar *filter = work->data;
736
a7289f9e8d29 Fix signed vs unsigned warnings.
zas_
parents: 673
diff changeset
376 guint lf = strlen(filter);
215
f2b439c7f973 Move strlen() calls outside the while loop.
zas_
parents: 212
diff changeset
377
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
378 if (ln >= lf)
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
379 {
605
651ae2be1031 Use g_ascii_strncasecmp() instead of strncasecmp() where applicable.
zas_
parents: 587
diff changeset
380 /* FIXME: utf8 */
1307
e8f21b91885d Glibification again.
zas_
parents: 1284
diff changeset
381 if (g_ascii_strncasecmp(name + ln - lf, filter, lf) == 0) return TRUE;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
382 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
383 work = work->next;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
384 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
385
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
386 return FALSE;
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
387 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
388
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
389
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
390 gboolean filter_name_exists(const gchar *name)
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
391 {
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
392 if (!extension_list || options->file_filter.disable) return TRUE;
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
393
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
394 return filter_name_find(extension_list, name);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
395 }
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
396
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
397 gboolean filter_file_class(const gchar *name, FileFormatClass file_class)
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
398 {
1177
5a20c47e7a14 Fix up unsigned expression always true/false warnings.
zas_
parents: 1055
diff changeset
399 if (file_class >= FILE_FORMAT_CLASSES)
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
400 {
673
fbebf5cf4a55 Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents: 671
diff changeset
401 log_printf("WARNING: invalid file class %d\n", file_class);
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
402 return FALSE;
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
403 }
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
404
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
405 return filter_name_find(file_class_extension_list[file_class], name);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
406 }
215
f2b439c7f973 Move strlen() calls outside the while loop.
zas_
parents: 212
diff changeset
407
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
408 gboolean filter_name_is_writable(const gchar *name)
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
409 {
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
410 return filter_name_find(file_writable_list, name);
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
411 }
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
412
1239
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
413 gboolean filter_name_allow_sidecar(const gchar *name)
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
414 {
254b09942e68 metadata write mode (direct or sidecar) made configurable for each file
nadvornik
parents: 1235
diff changeset
415 return filter_name_find(file_sidecar_list, name);
212
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
416 }
c7021159079d differentiate among normal image, raw image and metadata
nadvornik
parents: 202
diff changeset
417
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
418 void filter_write_list(GString *outstr, gint indent)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
419 {
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
420 GList *work;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
421
1461
e015b6573d36 improved config file formatting
nadvornik
parents: 1424
diff changeset
422 WRITE_NL(); WRITE_STRING("<filter>");
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
423 indent++;
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
424
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
425 work = filter_list;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
426 while (work)
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
427 {
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
428 FilterEntry *fe = work->data;
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
429 work = work->next;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 425
diff changeset
430
1461
e015b6573d36 improved config file formatting
nadvornik
parents: 1424
diff changeset
431 WRITE_NL(); WRITE_STRING("<file_type ");
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
432 WRITE_CHAR(*fe, key);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
433 WRITE_BOOL(*fe, enabled);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
434 WRITE_CHAR(*fe, extensions);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
435 WRITE_CHAR(*fe, description);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
436 WRITE_UINT(*fe, file_class);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
437 WRITE_BOOL(*fe, writable);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
438 WRITE_BOOL(*fe, allow_sidecar);
1461
e015b6573d36 improved config file formatting
nadvornik
parents: 1424
diff changeset
439 WRITE_STRING("/>");
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
440 }
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
441 indent--;
1461
e015b6573d36 improved config file formatting
nadvornik
parents: 1424
diff changeset
442 WRITE_NL(); WRITE_STRING("</filter>");
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
443 }
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
444
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
445 void filter_load_file_type(const gchar **attribute_names, const gchar **attribute_values)
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
446 {
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
447 FilterEntry fe;
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
448 FilterEntry *old_fe;
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
449 memset(&fe, 0, sizeof(fe));
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
450 while (*attribute_names)
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
451 {
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
452 const gchar *option = *attribute_names++;
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
453 const gchar *value = *attribute_values++;
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
454
1315
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
455 if (READ_CHAR(fe, key)) continue;
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
456 if (READ_BOOL(fe, enabled)) continue;
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
457 if (READ_CHAR(fe, extensions)) continue;
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
458 if (READ_CHAR(fe, description)) continue;
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
459 if (READ_UINT(fe, file_class)) continue;
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
460 if (READ_BOOL(fe, writable)) continue;
c1d108ab3388 Since READ_*() macros are now exported, do not hide
zas_
parents: 1314
diff changeset
461 if (READ_BOOL(fe, allow_sidecar)) continue;
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
462
1464
1b3751ac4743 be more verbose on parse errors
nadvornik
parents: 1461
diff changeset
463 log_printf("unknown attribute %s = %s\n", option, value);
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
464 }
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
465 if (fe.file_class >= FILE_FORMAT_CLASSES) fe.file_class = FORMAT_CLASS_UNKNOWN;
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
466
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
467 if (fe.key && fe.key[0] != 0)
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
468 {
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
469 old_fe = filter_get_by_key(fe.key);
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
470
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
471 if (old_fe != NULL) filter_remove_entry(old_fe);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
472 filter_add(fe.key, fe.description, fe.extensions, fe.file_class, fe.writable, fe.allow_sidecar, fe.enabled);
743
77ff94c0490a Try to load a system-wide rc file if any, before per-user rc file.
zas_
parents: 736
diff changeset
473 }
1309
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
474 g_free(fe.key);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
475 g_free(fe.extensions);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
476 g_free(fe.description);
55ea4962887a config file format changed to XML
nadvornik
parents: 1307
diff changeset
477 }
9
d907d608745f Sync to GQview 1.5.9 release.
gqview
parents: 3
diff changeset
478
1
b3e0e515fabf Initial revision
gqview
parents:
diff changeset
479
145
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
480 /*
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
481 *-----------------------------------------------------------------------------
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
482 * sidecar extension list
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
483 *-----------------------------------------------------------------------------
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
484 */
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
485
586
905688aa2317 split filelist.c to filefilter.c and filedata.c
nadvornik
parents: 576
diff changeset
486 GList *sidecar_ext_get_list(void)
145
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
487 {
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
488 return sidecar_ext_list;
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
489 }
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
490
1190
a4ea0c74a6e2 File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
zas_
parents: 1177
diff changeset
491 static void sidecar_ext_free_list(void)
145
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
492 {
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
493 GList *work;
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
494
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
495 work = sidecar_ext_list;
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
496 while (work)
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
497 {
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
498 gchar *ext = work->data;
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
499 work = work->next;
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
500 g_free(ext);
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
501 }
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
502 g_list_free(sidecar_ext_list);
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
503 sidecar_ext_list = NULL;
1190
a4ea0c74a6e2 File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
zas_
parents: 1177
diff changeset
504 }
a4ea0c74a6e2 File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
zas_
parents: 1177
diff changeset
505
1327
15208b140481 quoted_value is no longer needed
nadvornik
parents: 1315
diff changeset
506 void sidecar_ext_parse(const gchar *text)
1190
a4ea0c74a6e2 File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
zas_
parents: 1177
diff changeset
507 {
a4ea0c74a6e2 File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
zas_
parents: 1177
diff changeset
508 sidecar_ext_free_list();
1327
15208b140481 quoted_value is no longer needed
nadvornik
parents: 1315
diff changeset
509 if (text == NULL) return;
442
4b2d7f9af171 Big whitespaces cleanup:
zas_
parents: 425
diff changeset
510
1327
15208b140481 quoted_value is no longer needed
nadvornik
parents: 1315
diff changeset
511 sidecar_ext_list = filter_to_list(text);
145
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
512 }
8be2cc687304 fixed grouping sidecar files and made it configurable via config file
nadvornik
parents: 143
diff changeset
513
1190
a4ea0c74a6e2 File filters cleanup: add .pef .dng and .arw extensions to default sidecar extensions list, add .k25 in Kodak raw extensions, simplify and optimize sidecar_ext_parse().
zas_
parents: 1177
diff changeset
514
1055
1646720364cf Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents: 1023
diff changeset
515 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */