92
93
char *new_filename;
95
GnomeDesktopFile *df = NULL;
96
97
GError *rebuild_error;
99
g_assert (vendor_name);
101
dirname = g_path_get_dirname (filename);
102
basename = g_path_get_basename (filename);
104
if (!g_str_has_prefix (basename, vendor_name))
107
new_base = g_strconcat (vendor_name, "-", basename, NULL);
108
new_filename = g_build_filename (target_dir, new_base, NULL);
113
new_filename = g_build_filename (target_dir, basename, NULL);
119
df = gnome_desktop_file_load (filename, err);
123
if (!desktop_file_fixup (df, filename))
100
kf = g_key_file_new ();
101
if (!g_key_file_load_from_file (kf, filename,
102
G_KEY_FILE_KEEP_COMMENTS|
103
G_KEY_FILE_KEEP_TRANSLATIONS,
105
g_key_file_free (kf);
109
if (!desktop_file_fixup (kf, filename)) {
110
g_key_file_free (kf);
126
114
if (copy_name_to_generic_name)
127
gnome_desktop_file_copy_key (df, NULL, "Name", "GenericName");
115
dfu_key_file_copy_key (kf, GROUP_DESKTOP_ENTRY, "Name",
116
GROUP_DESKTOP_ENTRY, "GenericName");
129
118
if (copy_generic_name_to_name)
130
gnome_desktop_file_copy_key (df, NULL, "GenericName", "Name");
119
dfu_key_file_copy_key (kf, GROUP_DESKTOP_ENTRY, "GenericName",
120
GROUP_DESKTOP_ENTRY, "Name");
132
122
/* Mark file as having been processed by us, so automated
133
123
* tools can check that desktop files went through our
136
gnome_desktop_file_set_raw (df, NULL, "X-Desktop-File-Install-Version", NULL, VERSION);
126
g_key_file_set_string (kf, GROUP_DESKTOP_ENTRY,
127
"X-Desktop-File-Install-Version", VERSION);
138
129
/* Add categories */
139
130
tmp = added_categories;
140
131
while (tmp != NULL)
142
gnome_desktop_file_merge_string_into_list (df, NULL, "Categories",
133
dfu_key_file_merge_list (kf, GROUP_DESKTOP_ENTRY,
134
"Categories", tmp->data);
149
140
tmp = removed_categories;
150
141
while (tmp != NULL)
152
gnome_desktop_file_remove_string_from_list (df, NULL, "Categories",
143
dfu_key_file_remove_list (kf, GROUP_DESKTOP_ENTRY,
144
"Categories", tmp->data);
159
150
tmp = added_only_show_in;
160
151
while (tmp != NULL)
162
gnome_desktop_file_merge_string_into_list (df, NULL, "OnlyShowIn",
153
dfu_key_file_merge_list (kf, GROUP_DESKTOP_ENTRY,
154
"OnlyShowIn", tmp->data);
169
160
tmp = removed_only_show_in;
170
161
while (tmp != NULL)
172
gnome_desktop_file_remove_string_from_list (df, NULL, "OnlyShowIn",
163
dfu_key_file_remove_list (kf, GROUP_DESKTOP_ENTRY,
164
"OnlyShowIn", tmp->data);
198
189
tmp = removed_mime_types;
199
190
while (tmp != NULL)
201
gnome_desktop_file_remove_string_from_list (df, NULL, "MimeType",
192
dfu_key_file_remove_list (kf, GROUP_DESKTOP_ENTRY,
193
"MimeType", tmp->data);
209
if (!gnome_desktop_file_save (df, new_filename,
199
dirname = g_path_get_dirname (filename);
200
basename = g_path_get_basename (filename);
202
if (vendor_name && !g_str_has_prefix (basename, vendor_name))
205
new_base = g_strconcat (vendor_name, "-", basename, NULL);
206
new_filename = g_build_filename (target_dir, new_base, NULL);
211
new_filename = g_build_filename (target_dir, basename, NULL);
217
if (!dfu_key_file_to_file (kf, new_filename, err)) {
218
g_key_file_free (kf);
219
g_free (new_filename);
223
g_key_file_free (kf);
225
if (g_chmod (new_filename, permissions) < 0)
227
g_set_error (err, G_FILE_ERROR,
228
g_file_error_from_errno (errno),
229
_("Failed to set permissions %o on \"%s\": %s"),
230
permissions, new_filename, g_strerror (errno));
232
g_unlink (new_filename);
233
g_free (new_filename);
213
237
if (delete_original &&
214
238
!files_are_the_same (filename, new_filename))
216
if (unlink (filename) < 0)
240
if (g_unlink (filename) < 0)
217
241
g_printerr (_("Error removing original file \"%s\": %s\n"),
218
242
filename, g_strerror (errno));
221
gnome_desktop_file_free (df);
223
245
/* Load and validate the file we just wrote */
224
df = gnome_desktop_file_load (new_filename, err);
228
if (!desktop_file_validate (df, new_filename))
246
if (!desktop_file_validate (new_filename, FALSE, TRUE))
230
248
g_printerr (_("desktop-file-install created an invalid desktop file!\n"));
249
g_free (new_filename);
564
if (vendor_name == NULL)
579
if (vendor_name == NULL && g_getenv ("DESKTOP_FILE_VENDOR"))
565
580
vendor_name = g_strdup (g_getenv ("DESKTOP_FILE_VENDOR"));
567
if (vendor_name == NULL)
569
g_printerr (_("Must specify the vendor namespace for these files with --vendor\n"));
573
582
if (copy_generic_name_to_name && copy_name_to_generic_name)
575
584
g_printerr (_("Specifying both --copy-name-to-generic-name and --copy-generic-name-to-name at once doesn't make much sense.\n"));
579
if (target_dir == NULL)
588
if (target_dir == NULL && g_getenv ("DESKTOP_FILE_INSTALL_DIR"))
580
589
target_dir = g_strdup (g_getenv ("DESKTOP_FILE_INSTALL_DIR"));
582
591
if (target_dir == NULL)