annotate src/metadata.c @ 2607:4a7ef0180612

Fix writing to meta files Some time ago, this seemed to break. It should never have worked as it took the image extension and compare it to "...meta".
author Klaus Ethgen <Klaus@Ethgen.de>
date Sun, 17 Sep 2017 15:12:21 +0100
parents c6a11c0bade8
children 7a7e180298b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
2 * Copyright (C) 2004 John Ellis
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
3 * Copyright (C) 2008 - 2016 The Geeqie Team
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
4 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
5 * Authors: John Ellis, Laurent Monin
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
6 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
7 * This program is free software; you can redistribute it and/or modify
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
8 * it under the terms of the GNU General Public License as published by
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
10 * (at your option) any later version.
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
11 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
12 * This program is distributed in the hope that it will be useful,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
15 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
16 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
17 * You should have received a copy of the GNU General Public License along
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
18 * with this program; if not, write to the Free Software Foundation, Inc.,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
20 */
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
21
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
22 #include "main.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
23 #include "metadata.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
24
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
25 #include "cache.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
26 #include "exif.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
27 #include "filedata.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
28 #include "misc.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
29 #include "secure_save.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
30 #include "ui_fileops.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
31 #include "ui_misc.h"
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
32 #include "utilops.h"
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
33 #include "filefilter.h"
1582
f137ec3fd85e - handle color profile and write metadata buttons on statusbar by ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1568
diff changeset
34 #include "layout_util.h"
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
35 #include "rcfile.h"
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
36
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
37 typedef enum {
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
38 MK_NONE,
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
39 MK_KEYWORDS,
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
40 MK_COMMENT
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
41 } MetadataKey;
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
42
1597
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
43 static const gchar *group_keys[] = { /* tags that will be written to all files in a group, options->metadata.sync_grouped_files */
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
44 "Xmp.dc.title",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
45 "Xmp.photoshop.Urgency",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
46 "Xmp.photoshop.Category",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
47 "Xmp.photoshop.SupplementalCategory",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
48 "Xmp.dc.subject",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
49 "Xmp.iptc.Location",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
50 "Xmp.photoshop.Instruction",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
51 "Xmp.photoshop.DateCreated",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
52 "Xmp.dc.creator",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
53 "Xmp.photoshop.AuthorsPosition",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
54 "Xmp.photoshop.City",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
55 "Xmp.photoshop.State",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
56 "Xmp.iptc.CountryCode",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
57 "Xmp.photoshop.Country",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
58 "Xmp.photoshop.TransmissionReference",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
59 "Xmp.photoshop.Headline",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
60 "Xmp.photoshop.Credit",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
61 "Xmp.photoshop.Source",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
62 "Xmp.dc.rights",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
63 "Xmp.dc.description",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
64 "Xmp.photoshop.CaptionWriter",
3e20c76ee7ea extended the list of grouped metadata tags
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1593
diff changeset
65 NULL};
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
66
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
67 static gboolean metadata_write_queue_idle_cb(gpointer data);
1434
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
68 static gboolean metadata_legacy_write(FileData *fd);
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
69 static void metadata_legacy_delete(FileData *fd, const gchar *except);
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
70 static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **comment);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
71
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
72
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
73 /*
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
74 *-------------------------------------------------------------------
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
75 * long-term cache - keep keywords from whole dir in memory
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
76 *-------------------------------------------------------------------
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
77 */
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
78
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
79 /* fd->cached metadata list of lists
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
80 each particular list contains key as a first entry, then the values
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
81 */
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
82
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
83 static void metadata_cache_update(FileData *fd, const gchar *key, const GList *values)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
84 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
85 GList *work;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
86
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
87 work = fd->cached_metadata;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
88 while (work)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
89 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
90 GList *entry = work->data;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
91 gchar *entry_key = entry->data;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
92
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
93 if (strcmp(entry_key, key) == 0)
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
94 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
95 /* key found - just replace values */
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
96 GList *old_values = entry->next;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
97 entry->next = NULL;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
98 old_values->prev = NULL;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
99 string_list_free(old_values);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
100 work->data = g_list_append(entry, string_list_copy(values));
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
101 DEBUG_1("updated %s %s\n", key, fd->path);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
102 return;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
103 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
104 work = work->next;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
105 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
106
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
107 /* key not found - prepend new entry */
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
108 fd->cached_metadata = g_list_prepend(fd->cached_metadata,
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
109 g_list_prepend(string_list_copy(values), g_strdup(key)));
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
110 DEBUG_1("added %s %s\n", key, fd->path);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
111
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
112 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
113
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
114 static const GList *metadata_cache_get(FileData *fd, const gchar *key)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
115 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
116 GList *work;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
117
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
118 work = fd->cached_metadata;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
119 while (work)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
120 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
121 GList *entry = work->data;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
122 gchar *entry_key = entry->data;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
123
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
124 if (strcmp(entry_key, key) == 0)
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
125 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
126 /* key found */
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
127 DEBUG_1("found %s %s\n", key, fd->path);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
128 return entry;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
129 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
130 work = work->next;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
131 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
132 return NULL;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
133 DEBUG_1("not found %s %s\n", key, fd->path);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
134 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
135
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
136 static void metadata_cache_remove(FileData *fd, const gchar *key)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
137 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
138 GList *work;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
139
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
140 work = fd->cached_metadata;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
141 while (work)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
142 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
143 GList *entry = work->data;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
144 gchar *entry_key = entry->data;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
145
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
146 if (strcmp(entry_key, key) == 0)
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
147 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
148 /* key found */
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
149 string_list_free(entry);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
150 fd->cached_metadata = g_list_delete_link(fd->cached_metadata, work);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
151 DEBUG_1("removed %s %s\n", key, fd->path);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
152 return;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
153 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
154 work = work->next;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
155 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
156 DEBUG_1("not removed %s %s\n", key, fd->path);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
157 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
158
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
159 void metadata_cache_free(FileData *fd)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
160 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
161 GList *work;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
162 if (fd->cached_metadata) DEBUG_1("freed %s\n", fd->path);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
163
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
164 work = fd->cached_metadata;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
165 while (work)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
166 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
167 GList *entry = work->data;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
168 string_list_free(entry);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
169
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
170 work = work->next;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
171 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
172 g_list_free(fd->cached_metadata);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
173 fd->cached_metadata = NULL;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
174 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
175
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
176
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
177
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
178
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
179
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
180
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
181 /*
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
182 *-------------------------------------------------------------------
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
183 * write queue
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
184 *-------------------------------------------------------------------
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
185 */
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
186
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
187 static GList *metadata_write_queue = NULL;
1523
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1509
diff changeset
188 static guint metadata_write_idle_id = 0; /* event source id */
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
189
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
190 static void metadata_write_queue_add(FileData *fd)
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
191 {
1218
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
192 if (!g_list_find(metadata_write_queue, fd))
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
193 {
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
194 metadata_write_queue = g_list_prepend(metadata_write_queue, fd);
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
195 file_data_ref(fd);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
196
1582
f137ec3fd85e - handle color profile and write metadata buttons on statusbar by ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1568
diff changeset
197 layout_util_status_update_write_all();
1218
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
198 }
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
199
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
200 if (metadata_write_idle_id)
1214
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
201 {
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
202 g_source_remove(metadata_write_idle_id);
1523
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1509
diff changeset
203 metadata_write_idle_id = 0;
1214
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
204 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
205
1244
eeefa0f10d39 improved metadata preferences
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1243
diff changeset
206 if (options->metadata.confirm_after_timeout)
1214
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
207 {
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
208 metadata_write_idle_id = g_timeout_add(options->metadata.confirm_timeout * 1000, metadata_write_queue_idle_cb, NULL);
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
209 }
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
210 }
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
211
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
212
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
213 gboolean metadata_write_queue_remove(FileData *fd)
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
214 {
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
215 g_hash_table_destroy(fd->modified_xmp);
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
216 fd->modified_xmp = NULL;
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
217
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
218 metadata_write_queue = g_list_remove(metadata_write_queue, fd);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
219
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
220 file_data_increment_version(fd);
1432
7f454e7d07a3 improved notification system
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1429
diff changeset
221 file_data_send_notification(fd, NOTIFY_REREAD);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
222
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
223 file_data_unref(fd);
1240
6a1f19764c63 added a status bar button for writting metadata immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
224
1582
f137ec3fd85e - handle color profile and write metadata buttons on statusbar by ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1568
diff changeset
225 layout_util_status_update_write_all();
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
226 return TRUE;
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
227 }
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
228
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
229 gboolean metadata_write_queue_remove_list(GList *list)
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
230 {
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
231 GList *work;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
232 gboolean ret = TRUE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
233
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
234 work = list;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
235 while (work)
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
236 {
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
237 FileData *fd = work->data;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
238 work = work->next;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
239 ret = ret && metadata_write_queue_remove(fd);
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
240 }
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
241 return ret;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
242 }
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
243
1720
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
244 void metadata_notify_cb(FileData *fd, NotifyType type, gpointer data)
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
245 {
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
246 if (type & (NOTIFY_REREAD | NOTIFY_CHANGE))
1720
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
247 {
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
248 metadata_cache_free(fd);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
249
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
250 if (g_list_find(metadata_write_queue, fd))
1720
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
251 {
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
252 DEBUG_1("Notify metadata: %s %04x", fd->path, type);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
253 if (!isname(fd->path))
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
254 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
255 /* ignore deleted files */
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
256 metadata_write_queue_remove(fd);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
257 }
1720
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
258 }
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
259 }
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
260 }
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
261
1586
b8515ea34e58 force the metadata dialog if it was triggered by the menu or the button
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1582
diff changeset
262 gboolean metadata_write_queue_confirm(gboolean force_dialog, FileUtilDoneFunc done_func, gpointer done_data)
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
263 {
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
264 GList *work;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
265 GList *to_approve = NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
266
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
267 work = metadata_write_queue;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
268 while (work)
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
269 {
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
270 FileData *fd = work->data;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
271 work = work->next;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
272
1720
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
273 if (!isname(fd->path))
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
274 {
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
275 /* ignore deleted files */
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
276 metadata_write_queue_remove(fd);
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
277 continue;
3efe2125cdcc remove deleted files from metadata queue
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1715
diff changeset
278 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
279
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
280 if (fd->change) continue; /* another operation in progress, skip this file for now */
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
281
1225
b43a97da2cb7 fixed previous change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1224
diff changeset
282 to_approve = g_list_prepend(to_approve, file_data_ref(fd));
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
283 }
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
284
1586
b8515ea34e58 force the metadata dialog if it was triggered by the menu or the button
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1582
diff changeset
285 file_util_write_metadata(NULL, to_approve, NULL, force_dialog, done_func, done_data);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
286
1214
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
287 return (metadata_write_queue != NULL);
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
288 }
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
289
1214
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
290 static gboolean metadata_write_queue_idle_cb(gpointer data)
1e36edfd2a43 write metadata after timeout, image change or dir change
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1211
diff changeset
291 {
1586
b8515ea34e58 force the metadata dialog if it was triggered by the menu or the button
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1582
diff changeset
292 metadata_write_queue_confirm(FALSE, NULL, NULL);
1523
e52aabe8fc7a Fix up event source ids type: gint -> guint.
Laurent Monin <geeqie@norz.org>
parents: 1509
diff changeset
293 metadata_write_idle_id = 0;
1205
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
294 return FALSE;
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
295 }
90a3e8b07c5d use the workflow in utilops.c for metadata approving and writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1204
diff changeset
296
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
297 gboolean metadata_write_perform(FileData *fd)
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
298 {
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
299 gboolean success;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
300 ExifData *exif;
2607
4a7ef0180612 Fix writing to meta files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2600
diff changeset
301 guint ln, lf;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
302
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
303 g_assert(fd->change);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
304
2607
4a7ef0180612 Fix writing to meta files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2600
diff changeset
305 ln = strlen(fd->change->dest);
4a7ef0180612 Fix writing to meta files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2600
diff changeset
306 lf = strlen(GQ_CACHE_EXT_METADATA);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
307 if (fd->change->dest &&
2607
4a7ef0180612 Fix writing to meta files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2600
diff changeset
308 g_ascii_strncasecmp(fd->change->dest + ln - lf, GQ_CACHE_EXT_METADATA, lf) == 0)
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
309 {
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
310 success = metadata_legacy_write(fd);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
311 if (success) metadata_legacy_delete(fd, fd->change->dest);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
312 return success;
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
313 }
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
314
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
315 /* write via exiv2 */
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
316 /* we can either use cached metadata which have fd->modified_xmp already applied
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
317 or read metadata from file and apply fd->modified_xmp
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
318 metadata are read also if the file was modified meanwhile */
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
319 exif = exif_read_fd(fd);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
320 if (!exif) return FALSE;
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
321
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
322 success = (fd->change->dest) ? exif_write_sidecar(exif, fd->change->dest) : exif_write(exif); /* write modified metadata */
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
323 exif_free_fd(fd, exif);
1211
cc4d3023ced3 most of the metadata options now works
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1208
diff changeset
324
1255
ff73cc8793b0 do not ignore newly created sidecars
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1244
diff changeset
325 if (fd->change->dest)
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
326 /* this will create a FileData for the sidecar and link it to the main file
1255
ff73cc8793b0 do not ignore newly created sidecars
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1244
diff changeset
327 (we can't wait until the sidecar is discovered by directory scanning because
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
328 exif_read_fd is called before that and it would read the main file only and
1255
ff73cc8793b0 do not ignore newly created sidecars
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1244
diff changeset
329 store the metadata in the cache)
ff73cc8793b0 do not ignore newly created sidecars
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1244
diff changeset
330 FIXME: this does not catch new sidecars created by independent external programs
ff73cc8793b0 do not ignore newly created sidecars
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1244
diff changeset
331 */
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
332 file_data_unref(file_data_new_group(fd->change->dest));
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
333
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
334 if (success) metadata_legacy_delete(fd, fd->change->dest);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
335 return success;
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
336 }
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
337
1240
6a1f19764c63 added a status bar button for writting metadata immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
338 gint metadata_queue_length(void)
6a1f19764c63 added a status bar button for writting metadata immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
339 {
6a1f19764c63 added a status bar button for writting metadata immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
340 return g_list_length(metadata_write_queue);
6a1f19764c63 added a status bar button for writting metadata immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
341 }
6a1f19764c63 added a status bar button for writting metadata immediately
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1238
diff changeset
342
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
343 static gboolean metadata_check_key(const gchar *keys[], const gchar *key)
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
344 {
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
345 const gchar **k = keys;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
346
1243
473cb2cc42c9 fixed possible segfault
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1241
diff changeset
347 while (*k)
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
348 {
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
349 if (strcmp(key, *k) == 0) return TRUE;
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
350 k++;
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
351 }
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
352 return FALSE;
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
353 }
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
354
1567
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
355 gboolean metadata_write_revert(FileData *fd, const gchar *key)
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
356 {
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
357 if (!fd->modified_xmp) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
358
1567
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
359 g_hash_table_remove(fd->modified_xmp, key);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
360
1567
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
361 if (g_hash_table_size(fd->modified_xmp) == 0)
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
362 {
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
363 metadata_write_queue_remove(fd);
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
364 }
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
365 else
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
366 {
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
367 /* reread the metadata to restore the original value */
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
368 file_data_increment_version(fd);
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
369 file_data_send_notification(fd, NOTIFY_REREAD);
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
370 }
1568
40815af3d5f9 fixed return from metadata_write_revert
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1567
diff changeset
371 return TRUE;
1567
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
372 }
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
373
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
374 gboolean metadata_write_list(FileData *fd, const gchar *key, const GList *values)
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
375 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
376 if (!fd->modified_xmp)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
377 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
378 fd->modified_xmp = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)string_list_free);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
379 }
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
380 g_hash_table_insert(fd->modified_xmp, g_strdup(key), string_list_copy((GList *)values));
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
381
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
382 metadata_cache_remove(fd, key);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
383
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
384 if (fd->exif)
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
385 {
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
386 exif_update_metadata(fd->exif, key, values);
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
387 }
1204
98154f78605e queue metadata and write them in an idle callback
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1203
diff changeset
388 metadata_write_queue_add(fd);
1218
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
389 file_data_increment_version(fd);
1432
7f454e7d07a3 improved notification system
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1429
diff changeset
390 file_data_send_notification(fd, NOTIFY_METADATA);
1218
7274b21b5533 improved buffering and notifications
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1214
diff changeset
391
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
392 if (options->metadata.sync_grouped_files && metadata_check_key(group_keys, key))
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
393 {
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
394 GList *work = fd->sidecar_files;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
395
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
396 while (work)
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
397 {
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
398 FileData *sfd = work->data;
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
399 work = work->next;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
400
2598
b8f3f29bd641 Addl #510: Rudimentary video support
Tomasz Golinski <tomaszg@math.uwb.edu.pl>
parents: 2496
diff changeset
401 if (sfd->format_class == FORMAT_CLASS_META) continue;
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
402
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
403 metadata_write_list(sfd, key, values);
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
404 }
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
405 }
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
406
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
407
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
408 return TRUE;
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
409 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
410
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
411 gboolean metadata_write_string(FileData *fd, const gchar *key, const char *value)
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
412 {
1234
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
413 GList *list = g_list_append(NULL, g_strdup(value));
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
414 gboolean ret = metadata_write_list(fd, key, list);
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
415 string_list_free(list);
3c7d8cec0b50 write keywords and comments with separate functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1231
diff changeset
416 return ret;
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
417 }
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
418
1567
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
419 gboolean metadata_write_int(FileData *fd, const gchar *key, guint64 value)
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
420 {
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
421 gchar string[50];
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
422
2055
a14181f455e5 Fix a snprintf() warning regarding unsigned int64 format string.
Laurent Monin <geeqie@norz.org>
parents: 2021
diff changeset
423 g_snprintf(string, sizeof(string), "%llu", (unsigned long long) value);
1567
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
424 return metadata_write_string(fd, key, string);
ef3ca18df43f added an option to write image orientation to the metadata
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1542
diff changeset
425 }
1203
3d2d07d88a5b prepared infrastructure for delayed metadata writting - refreshing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1194
diff changeset
426
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
427 /*
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
428 *-------------------------------------------------------------------
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
429 * keyword / comment read/write
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
430 *-------------------------------------------------------------------
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
431 */
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
432
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
433 static gboolean metadata_file_write(gchar *path, const GList *keywords, const gchar *comment)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
434 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
435 SecureSaveInfo *ssi;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
436
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
437 ssi = secure_open(path);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
438 if (!ssi) return FALSE;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
439
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
440 secure_fprintf(ssi, "#%s comment (%s)\n\n", GQ_APPNAME, VERSION);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
441
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
442 secure_fprintf(ssi, "[keywords]\n");
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
443 while (keywords && secsave_errno == SS_ERR_NONE)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
444 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
445 const gchar *word = keywords->data;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
446 keywords = keywords->next;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
447
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
448 secure_fprintf(ssi, "%s\n", word);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
449 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
450 secure_fputc(ssi, '\n');
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
451
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
452 secure_fprintf(ssi, "[comment]\n");
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
453 secure_fprintf(ssi, "%s\n", (comment) ? comment : "");
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
454
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
455 secure_fprintf(ssi, "#end\n");
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
456
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
457 return (secure_close(ssi) == 0);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
458 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
459
1434
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
460 static gboolean metadata_legacy_write(FileData *fd)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
461 {
1434
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
462 gboolean success = FALSE;
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
463 gchar *metadata_pathl;
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
464 gpointer keywords;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
465 gpointer comment_l;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
466 gboolean have_keywords;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
467 gboolean have_comment;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
468 const gchar *comment;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
469 GList *orig_keywords = NULL;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
470 gchar *orig_comment = NULL;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
471
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
472 g_assert(fd->change && fd->change->dest);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
473
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
474 DEBUG_1("Saving comment: %s", fd->change->dest);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
475
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
476 if (!fd->modified_xmp) return TRUE;
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
477
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
478 metadata_pathl = path_from_utf8(fd->change->dest);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
479
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
480 have_keywords = g_hash_table_lookup_extended(fd->modified_xmp, KEYWORD_KEY, NULL, &keywords);
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
481 have_comment = g_hash_table_lookup_extended(fd->modified_xmp, COMMENT_KEY, NULL, &comment_l);
1687
fc88516f2993 fixed an use of uninitialized value
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1686
diff changeset
482 comment = (have_comment && comment_l) ? ((GList *)comment_l)->data : NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
483
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
484 if (!have_keywords || !have_comment) metadata_file_read(metadata_pathl, &orig_keywords, &orig_comment);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
485
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
486 success = metadata_file_write(metadata_pathl,
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
487 have_keywords ? (GList *)keywords : orig_keywords,
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
488 have_comment ? comment : orig_comment);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
489
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
490 g_free(metadata_pathl);
1683
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
491 g_free(orig_comment);
3a5a4662f724 fixed writting to gqview legacy format
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1656
diff changeset
492 string_list_free(orig_keywords);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
493
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
494 return success;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
495 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
496
1434
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
497 static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **comment)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
498 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
499 FILE *f;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
500 gchar s_buf[1024];
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
501 MetadataKey key = MK_NONE;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
502 GList *list = NULL;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
503 GString *comment_build = NULL;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
504
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
505 f = fopen(path, "r");
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
506 if (!f) return FALSE;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
507
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
508 while (fgets(s_buf, sizeof(s_buf), f))
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
509 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
510 gchar *ptr = s_buf;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
511
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
512 if (*ptr == '#') continue;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
513 if (*ptr == '[' && key != MK_COMMENT)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
514 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
515 gchar *keystr = ++ptr;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
516
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
517 key = MK_NONE;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
518 while (*ptr != ']' && *ptr != '\n' && *ptr != '\0') ptr++;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
519
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
520 if (*ptr == ']')
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
521 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
522 *ptr = '\0';
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
523 if (g_ascii_strcasecmp(keystr, "keywords") == 0)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
524 key = MK_KEYWORDS;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
525 else if (g_ascii_strcasecmp(keystr, "comment") == 0)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
526 key = MK_COMMENT;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
527 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
528 continue;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
529 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
530
1347
84d289bde1ea Add missing space between switch and first parenthesis.
Laurent Monin <geeqie@norz.org>
parents: 1340
diff changeset
531 switch (key)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
532 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
533 case MK_NONE:
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
534 break;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
535 case MK_KEYWORDS:
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
536 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
537 while (*ptr != '\n' && *ptr != '\0') ptr++;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
538 *ptr = '\0';
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
539 if (strlen(s_buf) > 0)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
540 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
541 gchar *kw = utf8_validate_or_convert(s_buf);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
542
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
543 list = g_list_prepend(list, kw);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
544 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
545 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
546 break;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
547 case MK_COMMENT:
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
548 if (!comment_build) comment_build = g_string_new("");
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
549 g_string_append(comment_build, s_buf);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
550 break;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
551 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
552 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
553
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
554 fclose(f);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
555
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
556 if (keywords)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
557 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
558 *keywords = g_list_reverse(list);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
559 }
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
560 else
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
561 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
562 string_list_free(list);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
563 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
564
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
565 if (comment_build)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
566 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
567 if (comment)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
568 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
569 gint len;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
570 gchar *ptr = comment_build->str;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
571
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
572 /* strip leading and trailing newlines */
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
573 while (*ptr == '\n') ptr++;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
574 len = strlen(ptr);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
575 while (len > 0 && ptr[len - 1] == '\n') len--;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
576 if (ptr[len] == '\n') len++; /* keep the last one */
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
577 if (len > 0)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
578 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
579 gchar *text = g_strndup(ptr, len);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
580
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
581 *comment = utf8_validate_or_convert(text);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
582 g_free(text);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
583 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
584 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
585 g_string_free(comment_build, TRUE);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
586 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
587
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
588 return TRUE;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
589 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
590
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
591 static void metadata_legacy_delete(FileData *fd, const gchar *except)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
592 {
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
593 gchar *metadata_path;
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
594 gchar *metadata_pathl;
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
595 if (!fd) return;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
596
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
597 metadata_path = cache_find_location(CACHE_TYPE_METADATA, fd->path);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
598 if (metadata_path && (!except || strcmp(metadata_path, except) != 0))
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
599 {
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
600 metadata_pathl = path_from_utf8(metadata_path);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
601 unlink(metadata_pathl);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
602 g_free(metadata_pathl);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
603 g_free(metadata_path);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
604 }
1686
4cb7c2245306 fixes for a built without Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1683
diff changeset
605
4cb7c2245306 fixes for a built without Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1683
diff changeset
606 #ifdef HAVE_EXIV2
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
607 /* without exiv2: do not delete xmp metadata because we are not able to convert it,
1686
4cb7c2245306 fixes for a built without Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1683
diff changeset
608 just ignore it */
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
609 metadata_path = cache_find_location(CACHE_TYPE_XMP_METADATA, fd->path);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
610 if (metadata_path && (!except || strcmp(metadata_path, except) != 0))
1224
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
611 {
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
612 metadata_pathl = path_from_utf8(metadata_path);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
613 unlink(metadata_pathl);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
614 g_free(metadata_pathl);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
615 g_free(metadata_path);
8caed680d86f improved sidecar writting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1222
diff changeset
616 }
1686
4cb7c2245306 fixes for a built without Exiv2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1683
diff changeset
617 #endif
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
618 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
619
1434
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
620 static gboolean metadata_legacy_read(FileData *fd, GList **keywords, gchar **comment)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
621 {
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
622 gchar *metadata_path;
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
623 gchar *metadata_pathl;
1434
ae031dcf1596 More gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1432
diff changeset
624 gboolean success = FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
625
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
626 if (!fd) return FALSE;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
627
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
628 metadata_path = cache_find_location(CACHE_TYPE_METADATA, fd->path);
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
629 if (!metadata_path) return FALSE;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
630
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
631 metadata_pathl = path_from_utf8(metadata_path);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
632
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
633 success = metadata_file_read(metadata_pathl, keywords, comment);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
634
1191
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
635 g_free(metadata_pathl);
4b38a4d60736 Rename most comment_*() functions to more appropriate metadata_*().
Laurent Monin <geeqie@norz.org>
parents: 1178
diff changeset
636 g_free(metadata_path);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
637
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
638 return success;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
639 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
640
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
641 static GList *remove_duplicate_strings_from_list(GList *list)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
642 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
643 GList *work = list;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
644 GHashTable *hashtable = g_hash_table_new(g_str_hash, g_str_equal);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
645 GList *newlist = NULL;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
646
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
647 while (work)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
648 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
649 gchar *key = work->data;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
650
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
651 if (g_hash_table_lookup(hashtable, key) == NULL)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
652 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
653 g_hash_table_insert(hashtable, (gpointer) key, GINT_TO_POINTER(1));
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
654 newlist = g_list_prepend(newlist, key);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
655 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
656 work = work->next;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
657 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
658
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
659 g_hash_table_destroy(hashtable);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
660 g_list_free(list);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
661
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
662 return g_list_reverse(newlist);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
663 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
664
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
665 GList *metadata_read_list(FileData *fd, const gchar *key, MetadataFormat format)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
666 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
667 ExifData *exif;
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
668 GList *list = NULL;
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
669 const GList *cache_entry;
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
670 if (!fd) return NULL;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
671
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
672 /* unwritten data overide everything */
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
673 if (fd->modified_xmp && format == METADATA_PLAIN)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
674 {
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
675 list = g_hash_table_lookup(fd->modified_xmp, key);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
676 if (list) return string_list_copy(list);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
677 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
678
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
679
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
680 if (format == METADATA_PLAIN && strcmp(key, KEYWORD_KEY) == 0
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
681 && (cache_entry = metadata_cache_get(fd, key)))
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
682 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
683 return string_list_copy(cache_entry->next);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
684 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
685
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
686 /*
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
687 Legacy metadata file is the primary source if it exists.
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
688 Merging the lists does not make much sense, because the existence of
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
689 legacy metadata file indicates that the other metadata sources are not
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
690 writable and thus it would not be possible to delete the keywords
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
691 that comes from the image file.
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
692 */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
693 if (strcmp(key, KEYWORD_KEY) == 0)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
694 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
695 if (metadata_legacy_read(fd, &list, NULL))
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
696 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
697 if (format == METADATA_PLAIN)
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
698 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
699 metadata_cache_update(fd, key, list);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
700 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
701 return list;
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
702 }
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
703 }
1504
b4d9d8be503f Cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1487
diff changeset
704 else if (strcmp(key, COMMENT_KEY) == 0)
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
705 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
706 gchar *comment = NULL;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
707 if (metadata_legacy_read(fd, NULL, &comment)) return g_list_append(NULL, comment);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
708 }
1504
b4d9d8be503f Cleanup.
Laurent Monin <geeqie@norz.org>
parents: 1487
diff changeset
709 else if (strncmp(key, "file.", 5) == 0)
1483
757f4a41c203 re-added possibility to display basic file info (size, mode, date)
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1465
diff changeset
710 {
757f4a41c203 re-added possibility to display basic file info (size, mode, date)
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1465
diff changeset
711 return g_list_append(NULL, metadata_file_info(fd, key, format));
757f4a41c203 re-added possibility to display basic file info (size, mode, date)
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1465
diff changeset
712 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
713
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
714 exif = exif_read_fd(fd); /* this is cached, thus inexpensive */
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
715 if (!exif) return NULL;
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
716 list = exif_get_metadata(exif, key, format);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
717 exif_free_fd(fd, exif);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
718
1923
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
719 if (format == METADATA_PLAIN && strcmp(key, KEYWORD_KEY) == 0)
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
720 {
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
721 metadata_cache_update(fd, key, list);
751d39d7ac30 added long-term cache for keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1806
diff changeset
722 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
723
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
724 return list;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
725 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
726
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
727 gchar *metadata_read_string(FileData *fd, const gchar *key, MetadataFormat format)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
728 {
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
729 GList *string_list = metadata_read_list(fd, key, format);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
730 if (string_list)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
731 {
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
732 gchar *str = string_list->data;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
733 string_list->data = NULL;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
734 string_list_free(string_list);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
735 return str;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
736 }
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
737 return NULL;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
738 }
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
739
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
740 guint64 metadata_read_int(FileData *fd, const gchar *key, guint64 fallback)
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
741 {
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
742 guint64 ret;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
743 gchar *endptr;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
744 gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
745 if (!string) return fallback;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
746
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
747 ret = g_ascii_strtoull(string, &endptr, 10);
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
748 if (string == endptr) ret = fallback;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
749 g_free(string);
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
750 return ret;
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
751 }
1509
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
752
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
753 gdouble metadata_read_GPS_coord(FileData *fd, const gchar *key, gdouble fallback)
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
754 {
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
755 gdouble coord;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
756 gchar *endptr;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
757 gdouble deg, min, sec;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
758 gboolean ok = FALSE;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
759 gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
760 if (!string) return fallback;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
761
1509
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
762 deg = g_ascii_strtod(string, &endptr);
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
763 if (*endptr == ',')
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
764 {
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
765 min = g_ascii_strtod(endptr + 1, &endptr);
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
766 if (*endptr == ',')
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
767 sec = g_ascii_strtod(endptr + 1, &endptr);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
768 else
1509
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
769 sec = 0.0;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
770
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
771
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
772 if (*endptr == 'S' || *endptr == 'W' || *endptr == 'N' || *endptr == 'E')
1509
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
773 {
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
774 coord = deg + min /60.0 + sec / 3600.0;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
775 ok = TRUE;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
776 if (*endptr == 'S' || *endptr == 'W') coord = -coord;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
777 }
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
778 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
779
1509
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
780 if (!ok)
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
781 {
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
782 coord = fallback;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
783 log_printf("unable to parse GPS coordinate '%s'\n", string);
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
784 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
785
1509
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
786 g_free(string);
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
787 return coord;
774ac86214cd added metadata_read_GPS_coord
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1504
diff changeset
788 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
789
2385
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
790 gdouble metadata_read_GPS_direction(FileData *fd, const gchar *key, gdouble fallback)
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
791 {
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
792 gchar *endptr;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
793 gdouble deg;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
794 gboolean ok = FALSE;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
795 gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
796 if (!string) return fallback;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
797
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
798 DEBUG_3("GPS_direction: %s\n", string);
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
799 deg = g_ascii_strtod(string, &endptr);
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
800
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
801 /* Expected text string is of the format e.g.:
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
802 * 18000/100
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
803 */
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
804 if (*endptr == '/')
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
805 {
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
806 deg = deg/100;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
807 ok = TRUE;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
808 }
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
809
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
810 if (!ok)
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
811 {
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
812 deg = fallback;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
813 log_printf("unable to parse GPS direction '%s: %f'\n", string, deg);
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
814 }
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
815
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
816 g_free(string);
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
817
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
818 return deg;
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
819 }
a7a8cacff188 Map image direction
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
820
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
821 gboolean metadata_append_string(FileData *fd, const gchar *key, const char *value)
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
822 {
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
823 gchar *str = metadata_read_string(fd, key, METADATA_PLAIN);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
824
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
825 if (!str)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
826 {
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
827 return metadata_write_string(fd, key, value);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
828 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
829 else
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
830 {
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
831 gchar *new_string = g_strconcat(str, value, NULL);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
832 gboolean ret = metadata_write_string(fd, key, new_string);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
833 g_free(str);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
834 g_free(new_string);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
835 return ret;
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
836 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
837 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
838
2478
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
839 gboolean metadata_write_GPS_coord(FileData *fd, const gchar *key, gdouble value)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
840 {
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
841 gint deg;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
842 gdouble min;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
843 gdouble param;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
844 char *coordinate;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
845 char *ref;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
846 gboolean ok = TRUE;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
847
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
848 param = value;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
849 if (param < 0)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
850 param = -param;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
851 deg = param;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
852 min = (param * 60) - (deg * 60);
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
853 if (g_strcmp0(key, "Xmp.exif.GPSLongitude") == 0)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
854 if (value < 0)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
855 ref = "W";
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
856 else
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
857 ref = "E";
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
858 else if (g_strcmp0(key, "Xmp.exif.GPSLatitude") == 0)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
859 if (value < 0)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
860 ref = "S";
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
861 else
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
862 ref = "N";
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
863 else
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
864 {
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
865 log_printf("unknown GPS parameter key '%s'\n", key);
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
866 ok = FALSE;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
867 }
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
868
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
869 if (ok)
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
870 {
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
871 coordinate = g_strdup_printf("%i,%lf,%s", deg, min, ref);
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
872 metadata_write_string(fd, key, coordinate );
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
873 g_free(coordinate);
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
874 }
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
875
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
876 return ok;
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
877 }
b3462ee88422 Geocode image by drag-drop
Colin Clark <colin.clark@cclark.uk>
parents: 2454
diff changeset
878
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
879 gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *values)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
880 {
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
881 GList *list = metadata_read_list(fd, key, METADATA_PLAIN);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
882
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
883 if (!list)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
884 {
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
885 return metadata_write_list(fd, key, values);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
886 }
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
887 else
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
888 {
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
889 gboolean ret;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
890 list = g_list_concat(list, string_list_copy(values));
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
891 list = remove_duplicate_strings_from_list(list);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
892
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
893 ret = metadata_write_list(fd, key, list);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
894 string_list_free(list);
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
895 return ret;
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
896 }
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
897 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
898
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
899 /**
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
900 * \see find_string_in_list
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
901 */
1340
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
902 gchar *find_string_in_list_utf8nocase(GList *list, const gchar *string)
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
903 {
1340
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
904 gchar *string_casefold = g_utf8_casefold(string, -1);
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
905
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
906 while (list)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
907 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
908 gchar *haystack = list->data;
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
909
1340
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
910 if (haystack)
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
911 {
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
912 gboolean equal;
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
913 gchar *haystack_casefold = g_utf8_casefold(haystack, -1);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
914
1340
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
915 equal = (strcmp(haystack_casefold, string_casefold) == 0);
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
916 g_free(haystack_casefold);
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
917
1340
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
918 if (equal)
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
919 {
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
920 g_free(string_casefold);
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
921 return haystack;
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
922 }
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
923 }
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
924
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
925 list = list->next;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
926 }
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
927
1340
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
928 g_free(string_casefold);
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
929 return NULL;
1117250d3bae Use g_utf8_casefold() to compare keywords, uppercased/lowercased keywords are now matched against predefined list.
Laurent Monin <geeqie@norz.org>
parents: 1288
diff changeset
930 }
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
931
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
932 /**
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
933 * \see find_string_in_list
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
934 */
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
935 gchar *find_string_in_list_utf8case(GList *list, const gchar *string)
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
936 {
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
937 while (list)
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
938 {
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
939 gchar *haystack = list->data;
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
940
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
941 if (haystack && strcmp(haystack, string) == 0)
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
942 return haystack;
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
943
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
944 list = list->next;
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
945 } // while (list)
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
946
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
947 return NULL;
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
948 } // gchar *find_string_in_list_utf...
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
949
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
950 /**
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
951 * \brief Find a existent string in a list.
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
952 *
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
953 * This is a switch between find_string_in_list_utf8case and
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
954 * find_string_in_list_utf8nocase to search with or without case for the
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
955 * existence of a string.
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
956 *
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
957 * \param list The list to search in
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
958 * \param string The string to search for
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
959 * \return The string or NULL
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
960 *
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
961 * \see find_string_in_list_utf8case
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
962 * \see find_string_in_list_utf8nocase
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
963 */
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
964 gchar *find_string_in_list(GList *list, const gchar *string)
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
965 {
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
966 if (options->metadata.keywords_case_sensitive)
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
967 return find_string_in_list_utf8case(list, string);
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
968 else
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
969 return find_string_in_list_utf8nocase(list, string);
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
970 }
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
971
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
972 #define KEYWORDS_SEPARATOR(c) ((c) == ',' || (c) == ';' || (c) == '\n' || (c) == '\r' || (c) == '\b')
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
973
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
974 GList *string_to_keywords_list(const gchar *text)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
975 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
976 GList *list = NULL;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
977 const gchar *ptr = text;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
978
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
979 while (*ptr != '\0')
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
980 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
981 const gchar *begin;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
982 gint l = 0;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
983
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
984 while (KEYWORDS_SEPARATOR(*ptr)) ptr++;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
985 begin = ptr;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
986 while (*ptr != '\0' && !KEYWORDS_SEPARATOR(*ptr))
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
987 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
988 ptr++;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
989 l++;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
990 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
991
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
992 /* trim starting and ending whitespaces */
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
993 while (l > 0 && g_ascii_isspace(*begin)) begin++, l--;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
994 while (l > 0 && g_ascii_isspace(begin[l-1])) l--;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
995
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
996 if (l > 0)
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
997 {
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
998 gchar *keyword = g_strndup(begin, l);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
999
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1000 /* only add if not already in the list */
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
1001 if (!find_string_in_list(list, keyword))
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1002 list = g_list_append(list, keyword);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1003 else
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1004 g_free(keyword);
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1005 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1006 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1007
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1008 return list;
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1009 }
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1010
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1011 /*
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1012 * keywords to marks
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1013 */
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1014
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1015
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1016 gboolean meta_data_get_keyword_mark(FileData *fd, gint n, gpointer data)
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1017 {
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1018 /* FIXME: do not use global keyword_tree */
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1019 GList *path = data;
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1020 GList *keywords;
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1021 gboolean found = FALSE;
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1022 keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
1238
47e6d7aac05b simplified metadata interface, dropped metadata_read,
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1234
diff changeset
1023 if (keywords)
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1024 {
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1025 GtkTreeIter iter;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1026 if (keyword_tree_get_iter(GTK_TREE_MODEL(keyword_tree), &iter, path) &&
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1027 keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords))
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1028 found = TRUE;
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1029
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1030 }
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1031 return found;
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1032 }
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1033
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1034 gboolean meta_data_set_keyword_mark(FileData *fd, gint n, gboolean value, gpointer data)
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1035 {
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1036 GList *path = data;
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1037 GList *keywords = NULL;
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1038 GtkTreeIter iter;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1039
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1040 if (!keyword_tree_get_iter(GTK_TREE_MODEL(keyword_tree), &iter, path)) return FALSE;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1041
1288
01a4a8674c8b use metadata_read_* functions where possible
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
1042 keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1043
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1044 if (!!keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords) != !!value)
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1045 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1046 if (value)
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1047 {
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1048 keyword_tree_set(GTK_TREE_MODEL(keyword_tree), &iter, &keywords);
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1049 }
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1050 else
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1051 {
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1052 keyword_tree_reset(GTK_TREE_MODEL(keyword_tree), &iter, &keywords);
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1053 }
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1054 metadata_write_list(fd, KEYWORD_KEY, keywords);
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1055 }
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1056
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1057 string_list_free(keywords);
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1058 return TRUE;
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1059 }
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1060
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1061
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1062
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1063 void meta_data_connect_mark_with_keyword(GtkTreeModel *keyword_tree, GtkTreeIter *kw_iter, gint mark)
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1064 {
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1065
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1066 FileDataGetMarkFunc get_mark_func;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1067 FileDataSetMarkFunc set_mark_func;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1068 gpointer mark_func_data;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1069
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1070 gint i;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1071
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1072 for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1073 {
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1074 file_data_get_registered_mark_func(i, &get_mark_func, &set_mark_func, &mark_func_data);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1075 if (get_mark_func == meta_data_get_keyword_mark)
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1076 {
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1077 GtkTreeIter old_kw_iter;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1078 GList *old_path = mark_func_data;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1079
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1080 if (keyword_tree_get_iter(keyword_tree, &old_kw_iter, old_path) &&
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1081 (i == mark || /* release any previous connection of given mark */
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1082 keyword_compare(keyword_tree, &old_kw_iter, kw_iter) == 0)) /* or given keyword */
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1083 {
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1084 file_data_register_mark_func(i, NULL, NULL, NULL, NULL);
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1085 gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), &old_kw_iter, KEYWORD_COLUMN_MARK, "", -1);
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1086 }
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1087 }
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1088 }
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1089
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1090
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1091 if (mark >= 0 && mark < FILEDATA_MARKS_SIZE)
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1092 {
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1093 GList *path;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1094 gchar *mark_str;
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1095 path = keyword_tree_get_path(keyword_tree, kw_iter);
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1096 file_data_register_mark_func(mark, meta_data_get_keyword_mark, meta_data_set_keyword_mark, path, (GDestroyNotify)string_list_free);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1097
2600
c6a11c0bade8 Bug fix #509: Increase number of marks to 10
Tomasz Golinski <tomaszg@math.uwb.edu.pl>
parents: 2598
diff changeset
1098 mark_str = g_strdup_printf("%d", (mark < 9 ? mark : -1) + 1);
1425
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1099 gtk_tree_store_set(GTK_TREE_STORE(keyword_tree), kw_iter, KEYWORD_COLUMN_MARK, mark_str, -1);
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1100 g_free(mark_str);
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1101 }
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1102 }
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1103
e1b082968bff fixed keyword to mark connection
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1414
diff changeset
1104
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1105 /*
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1106 *-------------------------------------------------------------------
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1107 * keyword tree
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1108 *-------------------------------------------------------------------
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1109 */
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1110
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1111
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1112
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1113 GtkTreeStore *keyword_tree;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1114
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1115 gchar *keyword_get_name(GtkTreeModel *keyword_tree, GtkTreeIter *iter)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1116 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1117 gchar *name;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1118 gtk_tree_model_get(keyword_tree, iter, KEYWORD_COLUMN_NAME, &name, -1);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1119 return name;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1120 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1121
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1122 gchar *keyword_get_mark(GtkTreeModel *keyword_tree, GtkTreeIter *iter)
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1123 {
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1124 gchar *mark_str;
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1125
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1126 gtk_tree_model_get(keyword_tree, iter, KEYWORD_COLUMN_MARK, &mark_str, -1);
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1127 return mark_str;
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1128 }
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1129
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1130 gchar *keyword_get_casefold(GtkTreeModel *keyword_tree, GtkTreeIter *iter)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1131 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1132 gchar *casefold;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1133 gtk_tree_model_get(keyword_tree, iter, KEYWORD_COLUMN_CASEFOLD, &casefold, -1);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1134 return casefold;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1135 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1136
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1137 gboolean keyword_get_is_keyword(GtkTreeModel *keyword_tree, GtkTreeIter *iter)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1138 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1139 gboolean is_keyword;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1140 gtk_tree_model_get(keyword_tree, iter, KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1141 return is_keyword;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1142 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1143
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1144 void keyword_set(GtkTreeStore *keyword_tree, GtkTreeIter *iter, const gchar *name, gboolean is_keyword)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1145 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1146 gchar *casefold = g_utf8_casefold(name, -1);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1147 gtk_tree_store_set(keyword_tree, iter, KEYWORD_COLUMN_MARK, "",
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1148 KEYWORD_COLUMN_NAME, name,
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1149 KEYWORD_COLUMN_CASEFOLD, casefold,
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1150 KEYWORD_COLUMN_IS_KEYWORD, is_keyword, -1);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1151 g_free(casefold);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1152 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1153
1396
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1154 gboolean keyword_compare(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b)
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1155 {
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1156 GtkTreePath *pa = gtk_tree_model_get_path(keyword_tree, a);
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1157 GtkTreePath *pb = gtk_tree_model_get_path(keyword_tree, b);
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1158 gint ret = gtk_tree_path_compare(pa, pb);
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1159 gtk_tree_path_free(pa);
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1160 gtk_tree_path_free(pb);
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1161 return ret;
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1162 }
b2b42f5032c4 dnd fixes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1392
diff changeset
1163
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1164 gboolean keyword_same_parent(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b)
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1165 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1166 GtkTreeIter parent_a;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1167 GtkTreeIter parent_b;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1168
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1169 gboolean valid_pa = gtk_tree_model_iter_parent(keyword_tree, &parent_a, a);
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1170 gboolean valid_pb = gtk_tree_model_iter_parent(keyword_tree, &parent_b, b);
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1171
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1172 if (valid_pa && valid_pb)
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1173 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1174 return keyword_compare(keyword_tree, &parent_a, &parent_b) == 0;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1175 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1176 else
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1177 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1178 return (!valid_pa && !valid_pb); /* both are toplevel */
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1179 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1180 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1181
1465
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1182 gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, GtkTreeIter *sibling, const gchar *name, gboolean exclude_sibling, GtkTreeIter *result)
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1183 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1184 GtkTreeIter parent;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1185 GtkTreeIter iter;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1186 gboolean toplevel = FALSE;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1187 gboolean ret;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1188 gchar *casefold;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1189
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1190 if (parent_ptr)
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1191 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1192 parent = *parent_ptr;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1193 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1194 else if (sibling)
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1195 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1196 toplevel = !gtk_tree_model_iter_parent(keyword_tree, &parent, sibling);
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1197 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1198 else
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1199 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1200 toplevel = TRUE;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1201 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1202
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1203 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &iter, toplevel ? NULL : &parent)) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1204
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1205 casefold = g_utf8_casefold(name, -1);
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1206 ret = FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1207
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1208 while (TRUE)
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1209 {
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1210 if (!(exclude_sibling && sibling && keyword_compare(keyword_tree, &iter, sibling) == 0))
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1211 {
1590
32a63a57690f use "keywords" instead of "tags" in option name, it is more consistent
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1586
diff changeset
1212 if (options->metadata.keywords_case_sensitive)
1540
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1213 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1214 gchar *iter_name = keyword_get_name(keyword_tree, &iter);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1215 ret = strcmp(name, iter_name) == 0;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1216 g_free(iter_name);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1217 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1218 else
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1219 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1220 gchar *iter_casefold = keyword_get_casefold(keyword_tree, &iter);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1221 ret = strcmp(casefold, iter_casefold) == 0;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1222 g_free(iter_casefold);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1223 } // if (options->metadata.tags_cas...
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1224 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1225 if (ret)
1465
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1226 {
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1227 if (result) *result = iter;
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1228 break;
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1229 }
1429
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1230 if (!gtk_tree_model_iter_next(keyword_tree, &iter)) break;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1231 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1232 g_free(casefold);
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1233 return ret;
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1234 }
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1235
7561b35307f1 do not allow to add keywords with the same name as siblings
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1428
diff changeset
1236
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1237 void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1238 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1239
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1240 gchar *mark, *name, *casefold;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1241 gboolean is_keyword;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1242
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1243 /* do not copy KEYWORD_COLUMN_HIDE_IN, it fully shows the new subtree */
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1244 gtk_tree_model_get(GTK_TREE_MODEL(keyword_tree), from, KEYWORD_COLUMN_MARK, &mark,
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1245 KEYWORD_COLUMN_NAME, &name,
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1246 KEYWORD_COLUMN_CASEFOLD, &casefold,
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1247 KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1248
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1249 gtk_tree_store_set(keyword_tree, to, KEYWORD_COLUMN_MARK, mark,
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1250 KEYWORD_COLUMN_NAME, name,
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1251 KEYWORD_COLUMN_CASEFOLD, casefold,
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1252 KEYWORD_COLUMN_IS_KEYWORD, is_keyword, -1);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1253 g_free(mark);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1254 g_free(name);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1255 g_free(casefold);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1256 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1257
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1258 void keyword_copy_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1259 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1260 GtkTreeIter from_child;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1261
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1262 keyword_copy(keyword_tree, to, from);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1263
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1264 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &from_child, from)) return;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1265
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1266 while (TRUE)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1267 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1268 GtkTreeIter to_child;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1269 gtk_tree_store_append(keyword_tree, &to_child, to);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1270 keyword_copy_recursive(keyword_tree, &to_child, &from_child);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1271 if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(keyword_tree), &from_child)) return;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1272 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1273 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1274
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1275 void keyword_move_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1276 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1277 keyword_copy_recursive(keyword_tree, to, from);
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1278 keyword_delete(keyword_tree, from);
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1279 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1280
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1281 GList *keyword_tree_get_path(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1282 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1283 GList *path = NULL;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1284 GtkTreeIter iter = *iter_ptr;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1285
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1286 while (TRUE)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1287 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1288 GtkTreeIter parent;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1289 path = g_list_prepend(path, keyword_get_name(keyword_tree, &iter));
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1290 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) break;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1291 iter = parent;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1292 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1293 return path;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1294 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1295
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1296 gboolean keyword_tree_get_iter(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr, GList *path)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1297 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1298 GtkTreeIter iter;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1299
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1300 if (!gtk_tree_model_get_iter_first(keyword_tree, &iter)) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1301
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1302 while (TRUE)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1303 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1304 GtkTreeIter children;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1305 while (TRUE)
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1306 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1307 gchar *name = keyword_get_name(keyword_tree, &iter);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1308 if (strcmp(name, path->data) == 0) break;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1309 g_free(name);
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1310 if (!gtk_tree_model_iter_next(keyword_tree, &iter)) return FALSE;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1311 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1312 path = path->next;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1313 if (!path)
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1314 {
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1315 *iter_ptr = iter;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1316 return TRUE;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1317 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1318
1392
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1319 if (!gtk_tree_model_iter_children(keyword_tree, &children, &iter)) return FALSE;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1320 iter = children;
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1321 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1322 }
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1323
9dbe64aa9e88 dnd in keywords tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1391
diff changeset
1324
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1325 static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTreeIter iter, GList *casefold_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1326 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1327 if (!casefold_list) return FALSE;
1456
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1328
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1329 if (!keyword_get_is_keyword(keyword_tree, &iter))
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1330 {
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1331 /* for the purpose of expanding and hiding, a helper is set if it has any children set */
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1332 GtkTreeIter child;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1333 if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter))
1456
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1334 return FALSE; /* this should happen only on empty helpers */
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1335
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1336 while (TRUE)
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1337 {
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1338 if (keyword_tree_is_set_casefold(keyword_tree, child, casefold_list)) return TRUE;
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1339 if (!gtk_tree_model_iter_next(keyword_tree, &child)) return FALSE;
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1340 }
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1341 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1342
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1343 while (TRUE)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1344 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1345 GtkTreeIter parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1346
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1347 if (keyword_get_is_keyword(keyword_tree, &iter))
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1348 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1349 GList *work = casefold_list;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1350 gboolean found = FALSE;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1351 gchar *iter_casefold = keyword_get_casefold(keyword_tree, &iter);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1352 while (work)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1353 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1354 const gchar *casefold = work->data;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1355 work = work->next;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1356
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1357 if (strcmp(iter_casefold, casefold) == 0)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1358 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1359 found = TRUE;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1360 break;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1361 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1362 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1363 g_free(iter_casefold);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1364 if (!found) return FALSE;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1365 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1366
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1367 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return TRUE;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1368 iter = parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1369 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1370 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1371
1540
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1372 static gboolean keyword_tree_is_set_casefull(GtkTreeModel *keyword_tree, GtkTreeIter iter, GList *kw_list)
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1373 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1374 if (!kw_list) return FALSE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1375
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1376 if (!keyword_get_is_keyword(keyword_tree, &iter))
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1377 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1378 /* for the purpose of expanding and hiding, a helper is set if it has any children set */
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1379 GtkTreeIter child;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1380 if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter))
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1381 return FALSE; /* this should happen only on empty helpers */
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1382
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1383 while (TRUE)
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1384 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1385 if (keyword_tree_is_set_casefull(keyword_tree, child, kw_list)) return TRUE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1386 if (!gtk_tree_model_iter_next(keyword_tree, &child)) return FALSE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1387 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1388 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1389
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1390 while (TRUE)
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1391 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1392 GtkTreeIter parent;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1393
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1394 if (keyword_get_is_keyword(keyword_tree, &iter))
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1395 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1396 GList *work = kw_list;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1397 gboolean found = FALSE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1398 gchar *iter_name = keyword_get_name(keyword_tree, &iter);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1399 while (work)
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1400 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1401 const gchar *name = work->data;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1402 work = work->next;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1403
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1404 if (strcmp(iter_name, name) == 0)
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1405 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1406 found = TRUE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1407 break;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1408 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1409 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1410 g_free(iter_name);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1411 if (!found) return FALSE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1412 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1413
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1414 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return TRUE;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1415 iter = parent;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1416 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1417 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1418
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1419 gboolean keyword_tree_is_set(GtkTreeModel *keyword_tree, GtkTreeIter *iter, GList *kw_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1420 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1421 gboolean ret;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1422 GList *casefold_list = NULL;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1423 GList *work;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1424
1590
32a63a57690f use "keywords" instead of "tags" in option name, it is more consistent
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1586
diff changeset
1425 if (options->metadata.keywords_case_sensitive)
1540
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1426 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1427 ret = keyword_tree_is_set_casefull(keyword_tree, *iter, kw_list);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1428 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1429 else
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1430 {
1540
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1431 work = kw_list;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1432 while (work)
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1433 {
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1434 const gchar *kw = work->data;
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1435 work = work->next;
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1436
1540
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1437 casefold_list = g_list_prepend(casefold_list, g_utf8_casefold(kw, -1));
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1438 }
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1439
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1440 ret = keyword_tree_is_set_casefold(keyword_tree, *iter, casefold_list);
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1441
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1442 string_list_free(casefold_list);
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1443 }
1540
e4d9e5918d46 Allow to configure case handling of keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1523
diff changeset
1444
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1445 return ret;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1446 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1447
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1448 void keyword_tree_set(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr, GList **kw_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1449 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1450 GtkTreeIter iter = *iter_ptr;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1451 while (TRUE)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1452 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1453 GtkTreeIter parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1454
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1455 if (keyword_get_is_keyword(keyword_tree, &iter))
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1456 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1457 gchar *name = keyword_get_name(keyword_tree, &iter);
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
1458 if (!find_string_in_list(*kw_list, name))
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1459 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1460 *kw_list = g_list_append(*kw_list, name);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1461 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1462 else
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1463 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1464 g_free(name);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1465 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1466 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1467
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1468 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1469 iter = parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1470 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1471 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1472
1806
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1473 GList *keyword_tree_get(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr)
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1474 {
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1475 GtkTreeIter iter = *iter_ptr;
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1476 GList *kw_list = NULL;
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1477
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1478 while (TRUE)
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1479 {
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1480 GtkTreeIter parent;
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1481
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1482 if (keyword_get_is_keyword(keyword_tree, &iter))
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1483 {
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1484 gchar *name = keyword_get_name(keyword_tree, &iter);
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1485 kw_list = g_list_append(kw_list, name);
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1486 }
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1487
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1488 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return kw_list;
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1489 iter = parent;
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1490 }
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1491 } // GList *keyword_tree_get(GtkTre...
7c43397b212b Add the feature to add single keywords to selection
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1802
diff changeset
1492
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1493 static void keyword_tree_reset1(GtkTreeModel *keyword_tree, GtkTreeIter *iter, GList **kw_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1494 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1495 gchar *found;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1496 gchar *name;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1497 if (!keyword_get_is_keyword(keyword_tree, iter)) return;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1498
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1499 name = keyword_get_name(keyword_tree, iter);
1715
4d6f5b68f235 Fix a small problem with casefull keywords
Klaus Ethgen <Klaus@Ethgen.de>
parents: 1687
diff changeset
1500 found = find_string_in_list(*kw_list, name);
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1501
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1502 if (found)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1503 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1504 *kw_list = g_list_remove(*kw_list, found);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1505 g_free(found);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1506 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1507 g_free(name);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1508 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1509
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1510 static void keyword_tree_reset_recursive(GtkTreeModel *keyword_tree, GtkTreeIter *iter, GList **kw_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1511 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1512 GtkTreeIter child;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1513 keyword_tree_reset1(keyword_tree, iter, kw_list);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1514
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1515 if (!gtk_tree_model_iter_children(keyword_tree, &child, iter)) return;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1516
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1517 while (TRUE)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1518 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1519 keyword_tree_reset_recursive(keyword_tree, &child, kw_list);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1520 if (!gtk_tree_model_iter_next(keyword_tree, &child)) return;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1521 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1522 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1523
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1524 static gboolean keyword_tree_check_empty_children(GtkTreeModel *keyword_tree, GtkTreeIter *parent, GList *kw_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1525 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1526 GtkTreeIter iter;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1527
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1528 if (!gtk_tree_model_iter_children(keyword_tree, &iter, parent))
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1529 return TRUE; /* this should happen only on empty helpers */
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1530
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1531 while (TRUE)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1532 {
1457
42868cfc14d6 simplified code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1456
diff changeset
1533 if (keyword_tree_is_set(keyword_tree, &iter, kw_list)) return FALSE;
42868cfc14d6 simplified code
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1456
diff changeset
1534 if (!gtk_tree_model_iter_next(keyword_tree, &iter)) return TRUE;
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1535 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1536 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1537
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1538 void keyword_tree_reset(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr, GList **kw_list)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1539 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1540 GtkTreeIter iter = *iter_ptr;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1541 GtkTreeIter parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1542 keyword_tree_reset_recursive(keyword_tree, &iter, kw_list);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1543
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1544 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1545 iter = parent;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1546
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1547 while (keyword_tree_check_empty_children(keyword_tree, &iter, *kw_list))
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1548 {
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1549 GtkTreeIter parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1550 keyword_tree_reset1(keyword_tree, &iter, kw_list);
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1551 if (!gtk_tree_model_iter_parent(keyword_tree, &parent, &iter)) return;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1552 iter = parent;
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1553 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1554 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1555
1414
5d76fc72993f added a popup menu in keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1404
diff changeset
1556 void keyword_delete(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr)
5d76fc72993f added a popup menu in keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1404
diff changeset
1557 {
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1558 GList *list;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1559 GtkTreeIter child;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1560 while (gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &child, iter_ptr))
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1561 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1562 keyword_delete(keyword_tree, &child);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1563 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1564
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1565 meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree), iter_ptr, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1566
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1567 gtk_tree_model_get(GTK_TREE_MODEL(keyword_tree), iter_ptr, KEYWORD_COLUMN_HIDE_IN, &list, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1568 g_list_free(list);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1569
1414
5d76fc72993f added a popup menu in keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1404
diff changeset
1570 gtk_tree_store_remove(keyword_tree, iter_ptr);
5d76fc72993f added a popup menu in keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1404
diff changeset
1571 }
5d76fc72993f added a popup menu in keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1404
diff changeset
1572
5d76fc72993f added a popup menu in keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1404
diff changeset
1573
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1574 void keyword_hide_in(GtkTreeStore *keyword_tree, GtkTreeIter *iter, gpointer id)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1575 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1576 GList *list;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1577 gtk_tree_model_get(GTK_TREE_MODEL(keyword_tree), iter, KEYWORD_COLUMN_HIDE_IN, &list, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1578 if (!g_list_find(list, id))
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1579 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1580 list = g_list_prepend(list, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1581 gtk_tree_store_set(keyword_tree, iter, KEYWORD_COLUMN_HIDE_IN, list, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1582 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1583 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1584
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1585 void keyword_show_in(GtkTreeStore *keyword_tree, GtkTreeIter *iter, gpointer id)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1586 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1587 GList *list;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1588 gtk_tree_model_get(GTK_TREE_MODEL(keyword_tree), iter, KEYWORD_COLUMN_HIDE_IN, &list, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1589 list = g_list_remove(list, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1590 gtk_tree_store_set(keyword_tree, iter, KEYWORD_COLUMN_HIDE_IN, list, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1591 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1592
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1593 gboolean keyword_is_hidden_in(GtkTreeModel *keyword_tree, GtkTreeIter *iter, gpointer id)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1594 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1595 GList *list;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1596 gtk_tree_model_get(keyword_tree, iter, KEYWORD_COLUMN_HIDE_IN, &list, -1);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1597 return !!g_list_find(list, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1598 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1599
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1600 static gboolean keyword_show_all_in_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1601 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1602 keyword_show_in(GTK_TREE_STORE(model), iter, data);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1603 return FALSE;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1604 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1605
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1606 void keyword_show_all_in(GtkTreeStore *keyword_tree, gpointer id)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1607 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1608 gtk_tree_model_foreach(GTK_TREE_MODEL(keyword_tree), keyword_show_all_in_cb, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1609 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1610
2496
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1611 static gboolean keyword_revert_hidden_in_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1612 {
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1613 if (keyword_is_hidden_in(GTK_TREE_MODEL(keyword_tree), iter, data))
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1614 {
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1615 keyword_show_in(GTK_TREE_STORE(model), iter, data);
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1616 }
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1617 return FALSE;
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1618 }
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1619
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1620 void keyword_revert_hidden_in(GtkTreeStore *keyword_tree, gpointer id)
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1621 {
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1622 gtk_tree_model_foreach(GTK_TREE_MODEL(keyword_tree), keyword_revert_hidden_in_cb, id);
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1623 }
724b89562e09 Additional keyword menu entries
Colin Clark <colin.clark@cclark.uk>
parents: 2492
diff changeset
1624
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1625 static void keyword_hide_unset_in_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr, gpointer id, GList *keywords)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1626 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1627 GtkTreeIter iter = *iter_ptr;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1628 while (TRUE)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1629 {
1456
01c26e43e1ce improved expanding and hiding of helper keywords
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1434
diff changeset
1630 if (!keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords))
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1631 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1632 keyword_hide_in(keyword_tree, &iter, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1633 /* no need to check children of hidden node */
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1634 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1635 else
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1636 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1637 GtkTreeIter child;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1638 if (gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &child, &iter))
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1639 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1640 keyword_hide_unset_in_recursive(keyword_tree, &child, id, keywords);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1641 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1642 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1643 if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(keyword_tree), &iter)) return;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1644 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1645 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1646
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1647 void keyword_hide_unset_in(GtkTreeStore *keyword_tree, gpointer id, GList *keywords)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1648 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1649 GtkTreeIter iter;
1487
8e5e0048e02d fixed possible crash
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1483
diff changeset
1650 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keyword_tree), &iter)) return;
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1651 keyword_hide_unset_in_recursive(keyword_tree, &iter, id, keywords);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1652 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1653
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1654 static gboolean keyword_show_set_in_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter_ptr, gpointer data)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1655 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1656 GtkTreeIter iter = *iter_ptr;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1657 GList *keywords = data;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1658 gpointer id = keywords->data;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1659 keywords = keywords->next; /* hack */
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1660 if (keyword_tree_is_set(model, &iter, keywords))
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1661 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1662 while (TRUE)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1663 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1664 GtkTreeIter parent;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1665 keyword_show_in(GTK_TREE_STORE(model), &iter, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1666 if (!gtk_tree_model_iter_parent(GTK_TREE_MODEL(keyword_tree), &parent, &iter)) break;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1667 iter = parent;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1668 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1669 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1670 return FALSE;
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1671 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1672
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1673 void keyword_show_set_in(GtkTreeStore *keyword_tree, gpointer id, GList *keywords)
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1674 {
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1675 /* hack: pass id to keyword_hide_unset_in_cb in the list */
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1676 keywords = g_list_prepend(keywords, id);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1677 gtk_tree_model_foreach(GTK_TREE_MODEL(keyword_tree), keyword_show_set_in_cb, keywords);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1678 keywords = g_list_delete_link(keywords, keywords);
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1679 }
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1680
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1681
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1682 void keyword_tree_new(void)
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1683 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1684 if (keyword_tree) return;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1685
1428
04b9acf969fb added keyword tree filtering
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1425
diff changeset
1686 keyword_tree = gtk_tree_store_new(KEYWORD_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER);
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1687 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1688
1542
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1689 static GtkTreeIter keyword_tree_default_append(GtkTreeStore *keyword_tree, GtkTreeIter *parent, const gchar *name, gboolean is_keyword)
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1690 {
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1691 GtkTreeIter iter;
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1692 gtk_tree_store_append(keyword_tree, &iter, parent);
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1693 keyword_set(keyword_tree, &iter, name, is_keyword);
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1694 return iter;
8ede4c31483e improved default keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1540
diff changeset
1695 }
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1696
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1697 void keyword_tree_new_default(void)
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1698 {
2181
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1699 GtkTreeIter i1, i2;
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1700
1593
1c7c5b99eae2 fixed keyword tree initialization
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1590
diff changeset
1701 if (!keyword_tree) keyword_tree_new();
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1702
2181
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1703 i1 = keyword_tree_default_append(keyword_tree, NULL, _("People"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1704 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Family"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1705 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Free time"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1706 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Children"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1707 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Sport"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1708 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Culture"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1709 keyword_tree_default_append(keyword_tree, &i2, _("Festival"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1710 i1 = keyword_tree_default_append(keyword_tree, NULL, _("Nature"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1711 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Animal"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1712 keyword_tree_default_append(keyword_tree, &i2, _("Bird"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1713 keyword_tree_default_append(keyword_tree, &i2, _("Insect"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1714 keyword_tree_default_append(keyword_tree, &i2, _("Pets"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1715 keyword_tree_default_append(keyword_tree, &i2, _("Wildlife"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1716 keyword_tree_default_append(keyword_tree, &i2, _("Zoo"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1717 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Plant"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1718 keyword_tree_default_append(keyword_tree, &i2, _("Tree"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1719 keyword_tree_default_append(keyword_tree, &i2, _("Flower"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1720 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Water"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1721 keyword_tree_default_append(keyword_tree, &i2, _("River"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1722 keyword_tree_default_append(keyword_tree, &i2, _("Lake"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1723 keyword_tree_default_append(keyword_tree, &i2, _("Sea"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1724 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Landscape"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1725 i1 = keyword_tree_default_append(keyword_tree, NULL, _("Art"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1726 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Statue"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1727 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Painting"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1728 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Historic"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1729 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Modern"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1730 i1 = keyword_tree_default_append(keyword_tree, NULL, _("City"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1731 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Park"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1732 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Street"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1733 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Square"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1734 i1 = keyword_tree_default_append(keyword_tree, NULL, _("Architecture"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1735 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Buildings"), FALSE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1736 keyword_tree_default_append(keyword_tree, &i2, _("House"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1737 keyword_tree_default_append(keyword_tree, &i2, _("Cathedral"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1738 keyword_tree_default_append(keyword_tree, &i2, _("Palace"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1739 keyword_tree_default_append(keyword_tree, &i2, _("Castle"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1740 keyword_tree_default_append(keyword_tree, &i2, _("Bridge"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1741 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Interior"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1742 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Historic"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1743 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Modern"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1744 i1 = keyword_tree_default_append(keyword_tree, NULL, _("Places"), FALSE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1745 i1 = keyword_tree_default_append(keyword_tree, NULL, _("Conditions"), FALSE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1746 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Night"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1747 keyword_tree_default_append(keyword_tree, &i2, _("Lights"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1748 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Reflections"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1749 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Sun"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1750 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Weather"), FALSE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1751 keyword_tree_default_append(keyword_tree, &i2, _("Fog"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1752 keyword_tree_default_append(keyword_tree, &i2, _("Rain"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1753 keyword_tree_default_append(keyword_tree, &i2, _("Clouds"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1754 keyword_tree_default_append(keyword_tree, &i2, _("Snow"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1755 keyword_tree_default_append(keyword_tree, &i2, _("Sunny weather"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1756 i1 = keyword_tree_default_append(keyword_tree, NULL, _("Photo"), FALSE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1757 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Edited"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1758 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Detail"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1759 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Macro"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1760 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Portrait"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1761 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Black and White"), TRUE);
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2055
diff changeset
1762 i2 = keyword_tree_default_append(keyword_tree, &i1, _("Perspective"), TRUE);
1391
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1763 }
b2468a429b8e implemented keywords editor as described at
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1347
diff changeset
1764
1222
4df9743e97b9 low-level keyword-to-mark functionality
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1220
diff changeset
1765
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1766 static void keyword_tree_node_write_config(GtkTreeModel *keyword_tree, GtkTreeIter *iter_ptr, GString *outstr, gint indent)
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1767 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1768 GtkTreeIter iter = *iter_ptr;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1769 while (TRUE)
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1770 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1771 GtkTreeIter children;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1772 gchar *name;
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1773 gchar *mark_str;
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1774
1461
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1775 WRITE_NL(); WRITE_STRING("<keyword ");
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1776 name = keyword_get_name(keyword_tree, &iter);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1777 write_char_option(outstr, indent, "name", name);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1778 g_free(name);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1779 write_bool_option(outstr, indent, "kw", keyword_get_is_keyword(keyword_tree, &iter));
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1780 mark_str = keyword_get_mark(keyword_tree, &iter);
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1781 if (mark_str && mark_str[0])
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1782 {
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1783 write_char_option(outstr, indent, "mark", mark_str);
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1784 }
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1785
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1786 if (gtk_tree_model_iter_children(keyword_tree, &children, &iter))
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1787 {
1461
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1788 WRITE_STRING(">");
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1789 indent++;
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1790 keyword_tree_node_write_config(keyword_tree, &children, outstr, indent);
1461
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1791 indent--;
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1792 WRITE_NL(); WRITE_STRING("</keyword>");
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1793 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1794 else
1461
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1795 {
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1796 WRITE_STRING("/>");
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1797 }
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1798 if (!gtk_tree_model_iter_next(keyword_tree, &iter)) return;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1799 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1800 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1801
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1802 void keyword_tree_write_config(GString *outstr, gint indent)
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1803 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1804 GtkTreeIter iter;
1461
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1805 WRITE_NL(); WRITE_STRING("<keyword_tree>");
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1806 indent++;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1807
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1808 if (keyword_tree && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keyword_tree), &iter))
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1809 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1810 keyword_tree_node_write_config(GTK_TREE_MODEL(keyword_tree), &iter, outstr, indent);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1811 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1812 indent--;
1461
8f4df7710af8 improved config file formatting
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1457
diff changeset
1813 WRITE_NL(); WRITE_STRING("</keyword_tree>");
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1814 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1815
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1816 GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *parent, const gchar **attribute_names, const gchar **attribute_values)
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1817 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1818 gchar *name = NULL;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1819 gboolean is_kw = TRUE;
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1820 gchar *mark_str = NULL;
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1821
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1822 while (*attribute_names)
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1823 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1824 const gchar *option = *attribute_names++;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1825 const gchar *value = *attribute_values++;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1826
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1827 if (READ_CHAR_FULL("name", name)) continue;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1828 if (READ_BOOL_FULL("kw", is_kw)) continue;
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1829 if (READ_CHAR_FULL("mark", mark_str)) continue;
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1830
1464
6c71e4a9d06a be more verbose on parse errors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1461
diff changeset
1831 log_printf("unknown attribute %s = %s\n", option, value);
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1832 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1833 if (name && name[0])
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1834 {
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1835 GtkTreeIter iter;
1465
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1836 /* re-use existing keyword if any */
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1837 if (!keyword_exists(GTK_TREE_MODEL(keyword_tree), parent, NULL, name, FALSE, &iter))
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1838 {
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1839 gtk_tree_store_append(keyword_tree, &iter, parent);
7f77bb16d3b1 do not add duplicate keywords from config file
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1464
diff changeset
1840 }
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1841 keyword_set(keyword_tree, &iter, name, is_kw);
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1842
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1843 if (mark_str)
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1844 {
2600
c6a11c0bade8 Bug fix #509: Increase number of marks to 10
Tomasz Golinski <tomaszg@math.uwb.edu.pl>
parents: 2598
diff changeset
1845 gint i = (gint)atoi(mark_str);
c6a11c0bade8 Bug fix #509: Increase number of marks to 10
Tomasz Golinski <tomaszg@math.uwb.edu.pl>
parents: 2598
diff changeset
1846 if (i == 0) i = 10;
c6a11c0bade8 Bug fix #509: Increase number of marks to 10
Tomasz Golinski <tomaszg@math.uwb.edu.pl>
parents: 2598
diff changeset
1847
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1848 meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree),
2600
c6a11c0bade8 Bug fix #509: Increase number of marks to 10
Tomasz Golinski <tomaszg@math.uwb.edu.pl>
parents: 2598
diff changeset
1849 &iter, i - 1);
2492
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1850 }
586556259c35 Fix #357: Save mark-and-keyword connections
Colin Clark <colin.clark@cclark.uk>
parents: 2478
diff changeset
1851
1404
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1852 g_free(name);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1853 return gtk_tree_iter_copy(&iter);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1854 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1855 g_free(name);
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1856 return NULL;
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1857 }
093f360034e3 save and restore the keyword tree
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1396
diff changeset
1858
1178
f30384a38be7 Move comments/keywords read and write stuff to new metadata.{c,h}.
Laurent Monin <geeqie@norz.org>
parents:
diff changeset
1859 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */