~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
			     _("Start package manager"), 
76
			     RES_START_PM,
77
			     _("Run upgrade"), 
78
			     RES_DIST_UPGRADER,
79
			     NULL);
80
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_DIST_UPGRADER);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
81
      break;
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
82
   case CD_WITH_ADDONS:
295 by Michael Vogt
* basic addon cd detection check added
83
      title = _("Addon volume detected");
84
      markup = _("<span weight=\"bold\" size=\"larger\">"
85
	    "An addon volume with software applications has "
322 by Michael Vogt
* fix spelling mistake in addon CD detection (LP#110352)
86
	    "been detected.</span>\n\n"
295 by Michael Vogt
* basic addon cd detection check added
87
	    "Would you like to view/install the content? ");
88
      gtk_dialog_add_buttons(GTK_DIALOG(dialog), 
89
			     GTK_STOCK_CANCEL,
90
			     GTK_RESPONSE_REJECT,
91
			     _("Start package manager"), 
92
			     RES_START_PM,
93
			     _("Start addon installer"), 
94
			     RES_ADDON_CD,
95
			     NULL);
96
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_ADDON_CD);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
97
      break;
295 by Michael Vogt
* basic addon cd detection check added
98
      
324 by Michael Vogt
* fix incorrect desktop file name
99
   case CD_WITH_APTONCD:
100
      title = _("APTonCD volume detected");
101
      markup = _("<span weight=\"bold\" size=\"larger\">"
102
	    "A volume with unofficial software packages has "
103
	    "been detected.</span>\n\n"
104
	    "Would you like to open it with the "
105
	    "package manager?");
106
      gtk_dialog_add_buttons(GTK_DIALOG(dialog), 
107
			     GTK_STOCK_CANCEL,
108
			     GTK_RESPONSE_REJECT,
109
			     _("Start package manager"), 
110
			     RES_START_PM,
111
			     NULL);
112
      gtk_dialog_set_default_response (GTK_DIALOG(dialog), RES_START_PM);
365 by Michael Vogt
* src/update.c, src/crash.c, src/hooks.c:
113
      break;      
324 by Michael Vogt
* fix incorrect desktop file name
114
   default:
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
115
      g_assert_not_reached();
116
   }
117
118
   gtk_window_set_title(GTK_WINDOW(dialog), title);
119
   gtk_window_set_skip_taskbar_hint (GTK_WINDOW(dialog), FALSE);
366 by Michael Vogt
- do not keep the cdrom detected window on top of
120
   gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dialog), markup);
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
121
33 by mvo
* cdrom detection dialog improved
122
   int res = gtk_dialog_run (GTK_DIALOG (dialog));
123
   char *cmd = NULL;
295 by Michael Vogt
* basic addon cd detection check added
124
   switch(res) {
92 by mvo
* configure.in:
125
   gchar *argv[3];
264.1.3 by Michael Vogt
* src/hal.c:
126
   case RES_START_PM:
92 by mvo
* configure.in:
127
      cmd = g_strdup_printf("synaptic --add-cdrom '%s'",mount_point);
316 by Michael Vogt
* fix cdrom detection for cdrom mountpoints with spaces (LP#114593)
128
      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
129
      break;
92 by mvo
* configure.in:
130
   case RES_DIST_UPGRADER:
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
131
      argv[0] = "/usr/lib/update-notifier/cddistupgrader";
264.1.2 by Michael Vogt
* data/apt-cdrom-check:
132
      argv[1] = (gchar *)mount_point;
476 by Michael Vogt
fix -Wall errors
133
      argv[2] = NULL;
264.1.2 by Michael Vogt
* data/apt-cdrom-check:
134
      g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, NULL);
135
      break;
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
136
   case RES_ADDON_CD:
295 by Michael Vogt
* basic addon cd detection check added
137
      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)
138
      invoke_with_gksu(cmd, "/usr/share/applications/gnome-app-install.desktop", FALSE);
323 by Michael Vogt
* fix incorrect desktop file name (thanks to cypherbios)
139
      break;
295 by Michael Vogt
* basic addon cd detection check added
140
   default:
264.1.3 by Michael Vogt
* src/hal.c:
141
      /* do nothing */
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
142
      break;
143
   }
33 by mvo
* cdrom detection dialog improved
144
   g_free(cmd);
295 by Michael Vogt
* basic addon cd detection check added
145
   gtk_widget_destroy (dialog);
33 by mvo
* cdrom detection dialog improved
146
}
147
148
void 
474 by Michael Vogt
* src/hal.c:
149
up_check_mount_point_for_packages (const char *mount_point, gpointer data)
150
{
151
   if (!mount_point)
152
      return;
153
30 by mvo
* added basic hal support.
154
   char *ubuntu_dir = g_strdup_printf("%s/ubuntu",mount_point);
155
   char *aptoncd_file = g_strdup_printf("%s/aptoncd.info",mount_point);
324 by Michael Vogt
* fix incorrect desktop file name
156
   if(! (g_file_test (ubuntu_dir, G_FILE_TEST_IS_SYMLINK) ||
157
	 g_file_test (aptoncd_file, G_FILE_TEST_IS_REGULAR) )) {
158
      g_free(ubuntu_dir);
30 by mvo
* added basic hal support.
159
      g_free(aptoncd_file);
324 by Michael Vogt
* fix incorrect desktop file name
160
      return;
30 by mvo
* added basic hal support.
161
   }
162
   g_free(ubuntu_dir);
263 by Michael Vogt
* src/hal.c:
163
   g_free(aptoncd_file);
324 by Michael Vogt
* fix incorrect desktop file name
164
30 by mvo
* added basic hal support.
165
   /* this looks like a ubuntu CD, run the checker script to verify
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
166
    * this. We expect the following return codes:
167
    # 0 - no ubuntu CD
168
    # 1 - CD with packages 
169
    # 2 - dist-upgrader CD
170
    # 3 - addon CD
324 by Michael Vogt
* fix incorrect desktop file name
171
    # 4 - aptoncd media
172
    * (see data/apt-cdrom-check)
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
173
    */
174
   //g_print("this looks like a ubuntu-cdrom\n");
30 by mvo
* added basic hal support.
175
   char *cmd = g_strdup_printf(CDROM_CHECKER" '%s'",mount_point);
316 by Michael Vogt
* fix cdrom detection for cdrom mountpoints with spaces (LP#114593)
176
   int retval=-1;
30 by mvo
* added basic hal support.
177
   g_spawn_command_line_sync(cmd, NULL, NULL,  &retval, NULL);
178
   
179
   //g_print("retval: %i \n", WEXITSTATUS(retval));
94 by mvo
* src/update-notifier.c:
180
   int cdtype = WEXITSTATUS(retval);
264.1.1 by Michael Vogt
* data/apt-cdrom-check:
181
   if(cdtype > 0) {
182
      distro_cd_detected(data, cdtype, mount_point);
474 by Michael Vogt
* src/hal.c:
183
   }
30 by mvo
* added basic hal support.
184
185
   g_free(cmd);
186
}
187
188
void 
474 by Michael Vogt
* src/hal.c:
189
up_device_changed (GduPool *pool, GduDevice *device, gpointer data)
190
{
191
   //g_print("up_device_changed %s\n", gdu_device_get_device_file (device));
192
193
   // check if that is a removable device
194
   if (!gdu_device_is_removable(device))
195
      return;
196
197
   // we only care about the first mount point
198
   const gchar *p = gdu_device_get_mount_path (device);
476 by Michael Vogt
fix -Wall errors
199
   //g_print("checking mount point %s\n", p);
474 by Michael Vogt
* src/hal.c:
200
   up_check_mount_point_for_packages (p, data);
201
}
202
203
204
void
205
up_check_mounted_devices (GduPool *pool, gpointer data)
206
{
207
   GList *devices = gdu_pool_get_devices (pool);
208
   
209
   while(devices != NULL) {
210
      up_device_changed (pool, devices->data, data);
211
      devices = g_list_next(devices);
212
   }
213
   g_list_free(devices);
214
}
215
216
gboolean
381 by Michael Vogt
* src/hal.c:
217
up_do_hal_init (UpgradeNotifier *un)
474 by Michael Vogt
* src/hal.c:
218
{
219
   GduPool *pool = gdu_pool_new ();
220
   if (pool == NULL)
496 by Michael Vogt
* src/hal.c:
221
      return FALSE;
222
223
   g_signal_connect (pool, "device_changed", (GCallback)up_device_changed, un);
476 by Michael Vogt
fix -Wall errors
224
   // now check what devices we have
474 by Michael Vogt
* src/hal.c:
225
   up_check_mounted_devices(pool, un);
226
227
   return TRUE;
228
}
229
230
231
#else
573 by Michael Vogt
merged from debian
232
#include <glib.h>
233
234
#include "update-notifier.h"
235
236
gboolean
237
up_do_hal_init (UpgradeNotifier *un)
238
{
239
    g_warning("Detection and monitoring of CD-ROMs disabled.");
240
    return FALSE;
241
}
242
#endif // HAVE_GUDEV
243