~ubuntu-branches/ubuntu/oneiric/evince/oneiric-updates

« back to all changes in this revision

Viewing changes to shell/ev-daemon.c

  • Committer: Bazaar Package Importer
  • Author(s): Rodrigo Moya, Josselin Mouette, Rodrigo Moya
  • Date: 2011-05-19 12:12:42 UTC
  • mfrom: (1.1.65 upstream) (1.3.6 experimental)
  • Revision ID: james.westby@ubuntu.com-20110519121242-967hbn2nh2hunp4y
Tags: 3.0.0-4ubuntu1
[ Josselin Mouette ]
* bug-presubj: please document where to report rendering bugs.
* evince.mime: dropped. We have desktop files to handle MIME 
  associations, no need to maintain an alternate system by hand.
  Closes: #619564, #627027, #551734, #581441.

[ Rodrigo Moya ]
* Rebase from Debian and GNOME3 PPA (thanks to Rico Tzschichholz).
  Remaining Ubuntu changes:
* debian/apparmor-profile:
* debian/apparmor-profile.abstraction:
* debian/evince.apport:
* debian/evince-common.dirs:
* debian/evince-common.postinst:
* debian/evince-common.postrm:
  - Add apparmor profile
* debian/control:
  - Build-Depend on debhelper (>= 7.4.20ubuntu5), gnome-common,
    hardening-includes and liblaunchpad-integration-3.0-dev
  - Standards-Version is 3.9.1
  - Depend on apparmor
* debian/rules:
  - Include hardening.make
  - Add rule to install apparmor files
* debian/watch:
  - Watch unstable series
* debian/patches/01_lpi.patch:
  - Launchpad integration patch
* debian/patches/04_gold.patch:
  - Link against libz
* debian/patches/05_library-path.patch:
  - Fix library path for g-ir-scanner

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* ev-metadata.c
 
1
/* ev-daemon.c
2
2
 *  this file is part of evince, a gnome document viewer
3
3
 *
4
4
 * Copyright (C) 2009 Carlos Garcia Campos  <carlosgc@gnome.org>
115
115
}
116
116
 
117
117
static gboolean
118
 
convert_metadata (const gchar *metadata)
119
 
{
120
 
        GFile   *file;
121
 
        char    *argv[3];
122
 
        gint     exit_status;
123
 
        GFileAttributeInfoList *namespaces;
124
 
        gboolean supported = FALSE;
125
 
        GError  *error = NULL;
126
 
        gboolean retval;
127
 
 
128
 
        /* If metadata is not supported for a local file
129
 
         * is likely because and old gvfs version is running.
130
 
         */
131
 
        file = g_file_new_for_path (metadata);
132
 
        namespaces = g_file_query_writable_namespaces (file, NULL, NULL);
133
 
        if (namespaces) {
134
 
                gint i;
135
 
 
136
 
                for (i = 0; i < namespaces->n_infos; i++) {
137
 
                        if (strcmp (namespaces->infos[i].name, "metadata") == 0) {
138
 
                                supported = TRUE;
139
 
                                break;
140
 
                        }
141
 
                }
142
 
                g_file_attribute_info_list_unref (namespaces);
143
 
        }
144
 
        if (!supported) {
145
 
                g_warning ("GVFS metadata not supported. "
146
 
                           "Evince will run without metadata support.\n");
147
 
                g_object_unref (file);
148
 
                return FALSE;
149
 
        }
150
 
        g_object_unref (file);
151
 
 
152
 
        argv[0] = g_build_filename (LIBEXECDIR, "evince-convert-metadata", NULL);
153
 
        argv[1] = (char *) metadata;
154
 
        argv[2] = NULL;
155
 
 
156
 
        retval = g_spawn_sync (NULL /* wd */, argv, NULL /* env */,
157
 
                               0, NULL, NULL, NULL, NULL,
158
 
                               &exit_status, &error);
159
 
        g_free (argv[0]);
160
 
 
161
 
        if (!retval) {
162
 
                g_printerr ("Error migrating metadata: %s\n", error->message);
163
 
                g_error_free (error);
164
 
        }
165
 
 
166
 
        return retval && WIFEXITED (exit_status) && WEXITSTATUS (exit_status) == 0;
167
 
}
168
 
 
169
 
static void
170
 
ev_migrate_metadata (void)
171
 
{
172
 
        gchar       *updated;
173
 
        gchar       *metadata;
174
 
        gchar       *dot_dir;
175
 
        const gchar *userdir;
176
 
 
177
 
        userdir = g_getenv ("GNOME22_USER_DIR");
178
 
        if (userdir) {
179
 
                dot_dir = g_build_filename (userdir, "evince", NULL);
180
 
        } else {
181
 
                dot_dir = g_build_filename (g_get_home_dir (),
182
 
                                            ".gnome2",
183
 
                                            "evince",
184
 
                                            NULL);
185
 
        }
186
 
 
187
 
        updated = g_build_filename (dot_dir, "migrated-to-gvfs", NULL);
188
 
        if (g_file_test (updated, G_FILE_TEST_EXISTS)) {
189
 
                /* Already migrated */
190
 
                g_free (updated);
191
 
                g_free (dot_dir);
192
 
                return;
193
 
        }
194
 
 
195
 
        metadata = g_build_filename (dot_dir, "ev-metadata.xml", NULL);
196
 
        if (g_file_test (metadata, G_FILE_TEST_EXISTS)) {
197
 
                if (convert_metadata (metadata)) {
198
 
                        gint fd;
199
 
 
200
 
                        fd = g_creat (updated, 0600);
201
 
                        if (fd != -1) {
202
 
                                close (fd);
203
 
                        }
204
 
                }
205
 
        }
206
 
 
207
 
        g_free (dot_dir);
208
 
        g_free (updated);
209
 
        g_free (metadata);
210
 
}
211
 
 
212
 
static gboolean
213
118
spawn_evince (const gchar *uri)
214
119
{
215
120
        gchar   *argv[3];
495
400
                  const gchar     *name,
496
401
                  gpointer         user_data)
497
402
{
498
 
        ev_migrate_metadata ();
499
 
 
500
403
        ev_daemon_maybe_start_killtimer (user_data);
501
404
}
502
405