~ubuntu-core-dev/update-notifier/ubuntu

573 by Michael Vogt
merged from debian
1
#ifdef HAVE_CONFIG_H
78 by mvo
* src/*.c: added #include "config.h" (/me <- stupid for forgeting it)
2
#include "config.h"
3
#endif
4
#ifdef HAVE_GDU
573 by Michael Vogt
merged from debian
5
#include <glib.h>
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
6
#include <glib-object.h>
474 by Michael Vogt
* src/hal.c:
7
8
#include <sys/types.h>
30 by mvo
* added basic hal support.
9
#include <sys/wait.h>
10
11
#include "update-notifier.h"
35 by mvo
* big rename: upgrade-notifier -> update-notifier
12
#define GDU_API_IS_SUBJECT_TO_CHANGE
573 by Michael Vogt
merged from debian
13
#include <gdu/gdu.h>
14
#include "gdu.h"
480 by Michael Vogt
rename hal.{c,h} to gdu.{c,h}
15
30 by mvo
* added basic hal support.
16
#define CDROM_CHECKER PACKAGE_LIB_DIR"/update-notifier/apt-cdrom-check"
37 by mvo
* src/hal.c: another updgrade-notifier found
17
30 by mvo
* added basic hal support.
18
/* reposonses for the dialog */
33 by mvo
* cdrom detection dialog improved
19
enum {
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
20
   RES_START_PM=1,
21
   RES_DIST_UPGRADER=2,
295 by Michael Vogt
* basic addon cd detection check added
22
   RES_ADDON_CD=3,
324 by Michael Vogt
* fix incorrect desktop file name
23
   RES_APTONCD=4
24
};
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
25
26
/* Returnvalues from apt-cdrom-check:
27
    # 0 - no ubuntu CD
28
    # 1 - CD with packages 
29
    # 2 - dist-upgrader CD
30
    # 3 - addon CD
295 by Michael Vogt
* basic addon cd detection check added
31
    # 4 - aptoncd media 
324 by Michael Vogt
* fix incorrect desktop file name
32
*/
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
33
enum {
34
   NO_CD, 
35
   CD_WITH_PACKAGES, 
36
   CD_WITH_DISTUPGRADER,
295 by Michael Vogt
* basic addon cd detection check added
37
   CD_WITH_ADDONS,
324 by Michael Vogt
* fix incorrect desktop file name
38
   CD_WITH_APTONCD   
39
};
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
40
33 by mvo
* cdrom detection dialog improved
41
void distro_cd_detected(UpgradeNotifier *un, 
475 by Michael Vogt
drop libgnome from the build-depends and switch to
42
			int cdtype, 
43
			const char *mount_point)
44
{
33 by mvo
* cdrom detection dialog improved
45
   GtkWidget *dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
46
					      GTK_MESSAGE_QUESTION, 
47
					      GTK_BUTTONS_NONE,
48
					      NULL );
49
   gchar *title, *markup;
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
50
   switch(cdtype) {
51
   case CD_WITH_PACKAGES:
52
      title = _("Software Packages Volume Detected");
424 by Michael Vogt
* src/hal.c:
53
      markup = _("<span weight=\"bold\" size=\"larger\">"
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
54
	    "A volume with software packages has "
55
	    "been detected.</span>\n\n"
56
	    "Would you like to open it with the "
57
	    "package manager?");
58
      gtk_dialog_add_buttons(GTK_DIALOG(dialog), 
59
			     GTK_STOCK_CANCEL,
60
			     GTK_RESPONSE_REJECT,
61
			     _("Start Package Manager"), 
424 by Michael Vogt
* src/hal.c:
62
			     RES_START_PM,
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
63
			     NULL);
64
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_START_PM);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
65
      break;
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
66
   case CD_WITH_DISTUPGRADER:
67
      title = _("Upgrade volume detected");
68
      markup = _("<span weight=\"bold\" size=\"larger\">"
69
	    "A distribution volume with software packages has "
70
	    "been detected.</span>\n\n"
71
	    "Would you like to try to upgrade from it automatically? ");
72
      gtk_dialog_add_buttons(GTK_DIALOG(dialog), 
73
			     GTK_STOCK_CANCEL,
74
			     GTK_RESPONSE_REJECT,
75
			     _("Run upgrade"), 
76
			     RES_DIST_UPGRADER,
77
			     NULL);
78
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_DIST_UPGRADER);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
79
      break;
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
80
   case CD_WITH_ADDONS:
295 by Michael Vogt
* basic addon cd detection check added
81
      title = _("Addon volume detected");
82
      markup = _("<span weight=\"bold\" size=\"larger\">"
83
	    "An addon volume with software applications has "
322 by Michael Vogt
* fix spelling mistake in addon CD detection (LP#110352)
84
	    "been detected.</span>\n\n"
295 by Michael Vogt
* basic addon cd detection check added
85
	    "Would you like to view/install the content? ");
86
      gtk_dialog_add_buttons(GTK_DIALOG(dialog), 
87
			     GTK_STOCK_CANCEL,
88
			     GTK_RESPONSE_REJECT,
89
			     _("Start package manager"), 
90
			     RES_START_PM,
91
			     _("Start addon installer"), 
92
			     RES_ADDON_CD,
93
			     NULL);
94
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_ADDON_CD);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
95
      break;
295 by Michael Vogt
* basic addon cd detection check added
96
      
324 by Michael Vogt
* fix incorrect desktop file name
97
   case CD_WITH_APTONCD:
98
      title = _("APTonCD volume detected");
99
      markup = _("<span weight=\"bold\" size=\"larger\">"
100
	    "A volume with unofficial software packages has "
101
	    "been detected.</span>\n\n"
102
	    "Would you like to open it with the "
103
	    "package manager?");
104
      gtk_dialog_add_buttons(GTK_DIALOG(dialog), 
105
			     GTK_STOCK_CANCEL,
106
			     GTK_RESPONSE_REJECT,
107
			     _("Start package manager"), 
108
			     RES_START_PM,
109
			     NULL);
110
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_START_PM);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
111
      break;      
324 by Michael Vogt
* fix incorrect desktop file name
112
   default:
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
113
      g_assert_not_reached();
114
   }
115
116
   gtk_window_set_title(GTK_WINDOW(dialog), title);
117
   gtk_window_set_skip_taskbar_hint (GTK_WINDOW(dialog), FALSE);
366 by Michael Vogt
- do not keep the cdrom detected window on top of
118
   gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dialog), markup);
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
119
33 by mvo
* cdrom detection dialog improved
120
   int res = gtk_dialog_run (GTK_DIALOG (dialog));
121
   char *cmd = NULL;
295 by Michael Vogt
* basic addon cd detection check added
122
   switch(res) {
92 by mvo
* configure.in:
123
   gchar *argv[3];
264.1.3 by Michael Vogt
* src/hal.c:
124
   case RES_START_PM:
92 by mvo
* configure.in:
125
      cmd = g_strdup_printf("synaptic --add-cdrom '%s'",mount_point);
316 by Michael Vogt
* fix cdrom detection for cdrom mountpoints with spaces (LP#114593)
126
      invoke_with_gksu(cmd, "/usr/share/applications/synaptic.desktop", FALSE);
283 by Martin Pitt
* src/update-notifier.h: Add a third argument to invoke_with_gksu which uses
127
      break;
92 by mvo
* configure.in:
128
   case RES_DIST_UPGRADER:
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
129
      argv[0] = "/usr/lib/update-notifier/cddistupgrader";
264.1.2 by Michael Vogt
* data/apt-cdrom-check:
130
      argv[1] = (gchar *)mount_point;
476 by Michael Vogt
fix -Wall errors
131
      argv[2] = NULL;
264.1.2 by Michael Vogt
* data/apt-cdrom-check:
132
      g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL);
133
      break;
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
134
   case RES_ADDON_CD:
295 by Michael Vogt
* basic addon cd detection check added
135
      cmd = g_strdup_printf("gnome-app-install --addon-cd='%s'", mount_point);
316 by Michael Vogt
* fix cdrom detection for cdrom mountpoints with spaces (LP#114593)
136
      invoke_with_gksu(cmd, "/usr/share/applications/gnome-app-install.desktop", FALSE);
323 by Michael Vogt
* fix incorrect desktop file name (thanks to cypherbios)
137
      break;
295 by Michael Vogt
* basic addon cd detection check added
138
   default:
264.1.3 by Michael Vogt
* src/hal.c:
139
      /* do nothing */
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
140
      break;
141
   }
33 by mvo
* cdrom detection dialog improved
142
   g_free(cmd);
295 by Michael Vogt
* basic addon cd detection check added
143
   gtk_widget_destroy (dialog);
33 by mvo
* cdrom detection dialog improved
144
}
145
146
void 
474 by Michael Vogt
* src/hal.c:
147
up_check_mount_point_for_packages (const char *mount_point, gpointer data)
148
{
149
   if (!mount_point)
150
      return;
151
30 by mvo
* added basic hal support.
152
   char *ubuntu_dir = g_strdup_printf("%s/ubuntu",mount_point);
153
   char *cdromupgrade = g_strdup_printf("%s/cdromupgrade",mount_point);
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
154
   char *aptoncd_file = g_strdup_printf("%s/aptoncd.info",mount_point);
324 by Michael Vogt
* fix incorrect desktop file name
155
   if(! (g_file_test (ubuntu_dir, G_FILE_TEST_IS_SYMLINK) ||
156
	 g_file_test (cdromupgrade, G_FILE_TEST_EXISTS) ||
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
157
	 g_file_test (aptoncd_file, G_FILE_TEST_IS_REGULAR) )) {
324 by Michael Vogt
* fix incorrect desktop file name
158
      g_free(ubuntu_dir);
30 by mvo
* added basic hal support.
159
      g_free(cdromupgrade);
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
160
      g_free(aptoncd_file);
324 by Michael Vogt
* fix incorrect desktop file name
161
      return;
30 by mvo
* added basic hal support.
162
   }
163
   g_free(ubuntu_dir);
263 by Michael Vogt
* src/hal.c:
164
   g_free(cdromupgrade);
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
165
   g_free(aptoncd_file);
324 by Michael Vogt
* fix incorrect desktop file name
166
30 by mvo
* added basic hal support.
167
   /* this looks like a ubuntu CD, run the checker script to verify
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
168
    * this. We expect the following return codes:
169
    # 0 - no ubuntu CD
170
    # 1 - CD with packages 
171
    # 2 - dist-upgrader CD
172
    # 3 - addon CD
324 by Michael Vogt
* fix incorrect desktop file name
173
    # 4 - aptoncd media
174
    * (see data/apt-cdrom-check)
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
175
    */
176
   //g_print("this looks like a ubuntu-cdrom\n");
30 by mvo
* added basic hal support.
177
   char *cmd = g_strdup_printf(CDROM_CHECKER" '%s'",mount_point);
316 by Michael Vogt
* fix cdrom detection for cdrom mountpoints with spaces (LP#114593)
178
   int retval=-1;
30 by mvo
* added basic hal support.
179
   g_spawn_command_line_sync(cmd, NULL, NULL,  &retval, NULL);
180
   
181
   //g_print("retval: %i \n", WEXITSTATUS(retval));
94 by mvo
* src/update-notifier.c:
182
   int cdtype = WEXITSTATUS(retval);
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
183
   if(cdtype > 0) {
184
      distro_cd_detected(data, cdtype, mount_point);
474 by Michael Vogt
* src/hal.c:
185
   }
30 by mvo
* added basic hal support.
186
187
   g_free(cmd);
188
}
189
190
void 
474 by Michael Vogt
* src/hal.c:
191
up_device_changed (GduPool *pool, GduDevice *device, gpointer data)
192
{
193
   //g_print("up_device_changed %s\n", gdu_device_get_device_file (device));
194
195
   // if its a partition, do the removable check on the parent
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
196
   GduDevice *removable = NULL;
197
   if (gdu_device_is_partition(device)) {
624 by Michael Vogt
src/gdu.c: fix ref counting
198
      removable = gdu_device_find_parent(device);
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
199
   } else {
624 by Michael Vogt
src/gdu.c: fix ref counting
200
      removable = device;
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
201
      g_object_ref(device);
624 by Michael Vogt
src/gdu.c: fix ref counting
202
   }
203
623 by Michael Vogt
* data/apt-cdrom-check, data/cddistupgrader:
204
   // check if that is a removable device
474 by Michael Vogt
* src/hal.c:
205
   if (!gdu_device_is_removable(removable)) {
624 by Michael Vogt
src/gdu.c: fix ref counting
206
      g_object_unref(removable);
207
      return;
474 by Michael Vogt
* src/hal.c:
208
   }
624 by Michael Vogt
src/gdu.c: fix ref counting
209
474 by Michael Vogt
* src/hal.c:
210
   // we only care about the first mount point
211
   const gchar *p = gdu_device_get_mount_path (device);
476 by Michael Vogt
fix -Wall errors
212
   //g_print("checking mount point %s\n", p);
474 by Michael Vogt
* src/hal.c:
213
   up_check_mount_point_for_packages (p, data);
214
}
215
216
217
void
218
up_check_mounted_devices (GduPool *pool, gpointer data)
219
{
220
   GList *devices = gdu_pool_get_devices (pool);
221
   
222
   while(devices != NULL) {
223
      up_device_changed (pool, devices->data, data);
224
      devices = g_list_next(devices);
225
   }
226
   g_list_free(devices);
227
}
228
229
gboolean
381 by Michael Vogt
* src/hal.c:
230
up_do_hal_init (UpgradeNotifier *un)
474 by Michael Vogt
* src/hal.c:
231
{
232
   GduPool *pool = gdu_pool_new ();
233
   if (pool == NULL)
496 by Michael Vogt
* src/hal.c:
234
      return FALSE;
235
236
   g_signal_connect (pool, "device_changed", (GCallback)up_device_changed, un);
476 by Michael Vogt
fix -Wall errors
237
   // now check what devices we have
474 by Michael Vogt
* src/hal.c:
238
   up_check_mounted_devices(pool, un);
239
240
   return TRUE;
241
}
242
243
244
#else
573 by Michael Vogt
merged from debian
245
#include <glib.h>
246
247
#include "update-notifier.h"
248
249
gboolean
250
up_do_hal_init (UpgradeNotifier *un)
251
{
252
    g_warning("Detection and monitoring of CD-ROMs disabled.");
253
    return FALSE;
254
}
255
#endif // HAVE_GUDEV
256