Merge lp:~rodrigo-moya/ubuntuone-client/check-before-disabling into lp:ubuntuone-client
- check-before-disabling
- Merge into trunk
Proposed by
Rodrigo Moya
Status: | Merged |
---|---|
Approved by: | Manuel de la Peña |
Approved revision: | 591 |
Merged at revision: | 597 |
Proposed branch: | lp:~rodrigo-moya/ubuntuone-client/check-before-disabling |
Merge into: | lp:ubuntuone-client |
Diff against target: |
1098 lines (+824/-61) 10 files modified
libsyncdaemon/Makefile.am (+2/-0) libsyncdaemon/libsyncdaemon.h (+1/-0) libsyncdaemon/syncdaemon-daemon.c (+4/-4) libsyncdaemon/syncdaemon-daemon.h (+3/-2) libsyncdaemon/syncdaemon-share-info.c (+344/-0) libsyncdaemon/syncdaemon-share-info.h (+78/-0) libsyncdaemon/syncdaemon-shares-interface.c (+177/-48) libsyncdaemon/syncdaemon-shares-interface.h (+2/-2) libsyncdaemon/test-libsyncdaemon.c (+113/-4) nautilus/location-widget.c (+100/-1) |
To merge this branch: | bzr merge lp:~rodrigo-moya/ubuntuone-client/check-before-disabling |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Manuel de la Peña (community) | Approve | ||
Natalia Bidart (community) | Approve | ||
Review via email: mp+30664@code.launchpad.net |
Commit message
Check for shared subfolders in UDFs when disabling them and ask user for confirmation
Description of the change
Check for shared subfolders in UDFs when disabling them and ask user for confirmation.
This cannot be tested due to a bug in syncdaemon (bug #608779), so please review it with that in mind
To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote : | # |
review:
Needs Information
Revision history for this message
Rodrigo Moya (rodrigo-moya) wrote : | # |
Is your syncdaemon running?
Revision history for this message
Rodrigo Moya (rodrigo-moya) wrote : | # |
wait, I'm getting it also, looking
- 591. By Rodrigo Moya
-
Run the test suite only when the syncdaemon is ready
Revision history for this message
Rodrigo Moya (rodrigo-moya) wrote : | # |
The tests got broken with the last merge from trunk, fixed now, so please review again
Revision history for this message
Natalia Bidart (nataliabidart) : | # |
review:
Approve
Revision history for this message
Manuel de la Peña (mandel) wrote : | # |
Tests work as expected
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'libsyncdaemon/Makefile.am' |
2 | --- libsyncdaemon/Makefile.am 2010-07-07 23:03:09 +0000 |
3 | +++ libsyncdaemon/Makefile.am 2010-07-23 10:31:40 +0000 |
4 | @@ -29,6 +29,7 @@ |
5 | syncdaemon-folders-interface.h \ |
6 | syncdaemon-metadata.h \ |
7 | syncdaemon-publicfiles-interface.h \ |
8 | + syncdaemon-share-info.h \ |
9 | syncdaemon-shares-interface.h \ |
10 | syncdaemon-status-info.h \ |
11 | syncdaemon-status-interface.h \ |
12 | @@ -46,6 +47,7 @@ |
13 | syncdaemon-folders-interface.c \ |
14 | syncdaemon-metadata.c \ |
15 | syncdaemon-publicfiles-interface.c \ |
16 | + syncdaemon-share-info.c \ |
17 | syncdaemon-shares-interface.c \ |
18 | syncdaemon-status-info.c \ |
19 | syncdaemon-status-interface.c \ |
20 | |
21 | === modified file 'libsyncdaemon/libsyncdaemon.h' |
22 | --- libsyncdaemon/libsyncdaemon.h 2010-06-24 10:25:12 +0000 |
23 | +++ libsyncdaemon/libsyncdaemon.h 2010-07-23 10:31:40 +0000 |
24 | @@ -27,6 +27,7 @@ |
25 | #include <libsyncdaemon/syncdaemon-folders-interface.h> |
26 | #include <libsyncdaemon/syncdaemon-interface.h> |
27 | #include <libsyncdaemon/syncdaemon-publicfiles-interface.h> |
28 | +#include <libsyncdaemon/syncdaemon-share-info.h> |
29 | #include <libsyncdaemon/syncdaemon-shares-interface.h> |
30 | #include <libsyncdaemon/syncdaemon-status-info.h> |
31 | #include <libsyncdaemon/syncdaemon-status-interface.h> |
32 | |
33 | === modified file 'libsyncdaemon/syncdaemon-daemon.c' |
34 | --- libsyncdaemon/syncdaemon-daemon.c 2010-07-20 10:30:05 +0000 |
35 | +++ libsyncdaemon/syncdaemon-daemon.c 2010-07-23 10:31:40 +0000 |
36 | @@ -222,19 +222,19 @@ |
37 | (GSignalFlags) G_SIGNAL_RUN_LAST, |
38 | G_STRUCT_OFFSET (SyncdaemonDaemonClass, share_created), |
39 | NULL, NULL, |
40 | - _syncdaemon_marshal_VOID__BOOLEAN_POINTER, |
41 | + _syncdaemon_marshal_VOID__BOOLEAN_OBJECT, |
42 | G_TYPE_NONE, 2, |
43 | G_TYPE_BOOLEAN, |
44 | - G_TYPE_POINTER); |
45 | + G_TYPE_OBJECT); |
46 | daemon_signals[SHARE_DELETED_SIGNAL] = g_signal_new ("share_deleted", |
47 | G_TYPE_FROM_CLASS (klass), |
48 | (GSignalFlags) G_SIGNAL_RUN_LAST, |
49 | G_STRUCT_OFFSET (SyncdaemonDaemonClass, share_deleted), |
50 | NULL, NULL, |
51 | - _syncdaemon_marshal_VOID__BOOLEAN_POINTER, |
52 | + _syncdaemon_marshal_VOID__BOOLEAN_OBJECT, |
53 | G_TYPE_NONE, 2, |
54 | G_TYPE_BOOLEAN, |
55 | - G_TYPE_POINTER); |
56 | + G_TYPE_OBJECT); |
57 | daemon_signals[DOWNLOAD_STARTED_SIGNAL] = g_signal_new ("download_started", |
58 | G_TYPE_FROM_CLASS (klass), |
59 | (GSignalFlags) G_SIGNAL_RUN_LAST, |
60 | |
61 | === modified file 'libsyncdaemon/syncdaemon-daemon.h' |
62 | --- libsyncdaemon/syncdaemon-daemon.h 2010-07-20 08:37:30 +0000 |
63 | +++ libsyncdaemon/syncdaemon-daemon.h 2010-07-23 10:31:40 +0000 |
64 | @@ -25,6 +25,7 @@ |
65 | #include <glib-object.h> |
66 | #include "syncdaemon-folder-info.h" |
67 | #include "syncdaemon-interface.h" |
68 | +#include "syncdaemon-share-info.h" |
69 | #include "syncdaemon-status-info.h" |
70 | #include "syncdaemon-transfer-info.h" |
71 | |
72 | @@ -65,8 +66,8 @@ |
73 | void (* file_published) (SyncdaemonDaemon *daemon, GHashTable *file_info); |
74 | void (* got_published_files) (SyncdaemonDaemon *daemon, GPtrArray *files); |
75 | |
76 | - void (* share_created) (SyncdaemonDaemon *daemon, gboolean success, GHashTable *share_info); |
77 | - void (* share_deleted) (SyncdaemonDaemon *daemon, gboolean success, GHashTable *share_info); |
78 | + void (* share_created) (SyncdaemonDaemon *daemon, gboolean success, SyncdaemonShareInfo *share_info); |
79 | + void (* share_deleted) (SyncdaemonDaemon *daemon, gboolean success, SyncdaemonShareInfo *share_info); |
80 | |
81 | void (* download_started) (SyncdaemonDaemon *daemon, const gchar *path); |
82 | void (* download_file_progress) (SyncdaemonDaemon *daemon, const gchar *path, SyncdaemonTransferInfo *tinfo); |
83 | |
84 | === added file 'libsyncdaemon/syncdaemon-share-info.c' |
85 | --- libsyncdaemon/syncdaemon-share-info.c 1970-01-01 00:00:00 +0000 |
86 | +++ libsyncdaemon/syncdaemon-share-info.c 2010-07-23 10:31:40 +0000 |
87 | @@ -0,0 +1,344 @@ |
88 | +/* |
89 | + * Syncdaemon API |
90 | + * |
91 | + * Authors: Rodrigo Moya <rodrigo.moya@canonical.com> |
92 | + * |
93 | + * Copyright 2010 Canonical Ltd. |
94 | + * |
95 | + * This program is free software: you can redistribute it and/or modify it |
96 | + * under the terms of the GNU General Public License version 3, as published |
97 | + * by the Free Software Foundation. |
98 | + * |
99 | + * This program is distributed in the hope that it will be useful, but |
100 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
101 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
102 | + * PURPOSE. See the GNU General Public License for more details. |
103 | + * |
104 | + * You should have received a copy of the GNU General Public License along |
105 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
106 | + * |
107 | + */ |
108 | + |
109 | +#include "syncdaemon-share-info.h" |
110 | + |
111 | +G_DEFINE_TYPE(SyncdaemonShareInfo, syncdaemon_share_info, G_TYPE_OBJECT) |
112 | + |
113 | +struct _SyncdaemonShareInfoPrivate { |
114 | + gchar *name; |
115 | + SyncdaemonShareInfoType type; |
116 | + gchar *path; |
117 | + gchar *username; |
118 | + gchar *user_visible_name; |
119 | + gchar *node_id; |
120 | + gchar *volume_id; |
121 | + gboolean accepted; |
122 | + gboolean allow_modifications; |
123 | +}; |
124 | + |
125 | +static void |
126 | +syncdaemon_share_info_finalize (GObject *object) |
127 | +{ |
128 | + SyncdaemonShareInfo *sinfo = SYNCDAEMON_SHARE_INFO (object); |
129 | + |
130 | + if (sinfo->priv != NULL) { |
131 | + if (sinfo->priv->name != NULL) |
132 | + g_free (sinfo->priv->name); |
133 | + |
134 | + if (sinfo->priv->path != NULL) |
135 | + g_free (sinfo->priv->path); |
136 | + |
137 | + if (sinfo->priv->username != NULL) |
138 | + g_free (sinfo->priv->username); |
139 | + |
140 | + if (sinfo->priv->user_visible_name != NULL) |
141 | + g_free (sinfo->priv->user_visible_name); |
142 | + |
143 | + if (sinfo->priv->node_id != NULL) |
144 | + g_free (sinfo->priv->node_id); |
145 | + |
146 | + if (sinfo->priv->volume_id != NULL) |
147 | + g_free (sinfo->priv->volume_id); |
148 | + |
149 | + g_free (sinfo->priv); |
150 | + } |
151 | + |
152 | + G_OBJECT_CLASS (syncdaemon_share_info_parent_class)->finalize (object); |
153 | +} |
154 | + |
155 | +static void |
156 | +syncdaemon_share_info_class_init (SyncdaemonShareInfoClass *klass) |
157 | +{ |
158 | + GObjectClass *object_class = G_OBJECT_CLASS (klass); |
159 | + |
160 | + object_class->finalize = syncdaemon_share_info_finalize; |
161 | +} |
162 | + |
163 | +static void |
164 | +syncdaemon_share_info_init (SyncdaemonShareInfo *sinfo) |
165 | +{ |
166 | + sinfo->priv = g_new0 (SyncdaemonShareInfoPrivate, 1); |
167 | +} |
168 | + |
169 | +/** |
170 | + * syncdaemon_share_info_new: |
171 | + */ |
172 | +SyncdaemonShareInfo * |
173 | +syncdaemon_share_info_new (void) |
174 | +{ |
175 | + return g_object_new (SYNCDAEMON_TYPE_SHARE_INFO, NULL); |
176 | +} |
177 | + |
178 | +/** |
179 | + * syncdaemon_share_info_new_from_hash_table: |
180 | + */ |
181 | +SyncdaemonShareInfo * |
182 | +syncdaemon_share_info_new_from_hash_table (GHashTable *hash) |
183 | +{ |
184 | + SyncdaemonShareInfo *sinfo; |
185 | + |
186 | + sinfo = g_object_new (SYNCDAEMON_TYPE_SHARE_INFO, NULL); |
187 | + if (hash != NULL) { |
188 | + gchar *str; |
189 | + |
190 | + syncdaemon_share_info_set_name (sinfo, g_hash_table_lookup (hash, "name")); |
191 | + syncdaemon_share_info_set_path (sinfo, g_hash_table_lookup (hash, "path")); |
192 | + syncdaemon_share_info_set_username (sinfo, g_hash_table_lookup (hash, "other_username")); |
193 | + syncdaemon_share_info_set_user_visible_name ( |
194 | + sinfo, |
195 | + g_hash_table_lookup (hash, "other_visible_name")); |
196 | + syncdaemon_share_info_set_node_id (sinfo, g_hash_table_lookup (hash, "node_id")); |
197 | + syncdaemon_share_info_set_volume_id (sinfo, g_hash_table_lookup (hash, "volume_id")); |
198 | + syncdaemon_share_info_set_accepted ( |
199 | + sinfo, |
200 | + g_strcmp0 (g_hash_table_lookup (hash, "accepted"), "True") == 0); |
201 | + syncdaemon_share_info_set_allow_modifications ( |
202 | + sinfo, |
203 | + g_strcmp0 (g_hash_table_lookup (hash, "access_level"), "Modify") == 0); |
204 | + |
205 | + str = g_hash_table_lookup (hash, "type"); |
206 | + if (g_strcmp0 (str, "Shared") == 0) |
207 | + syncdaemon_share_info_set_share_type (sinfo, SYNCDAEMON_SHARE_INFO_TYPE_SHARED); |
208 | + else if (g_strcmp0 (str, "Share") == 0) |
209 | + syncdaemon_share_info_set_share_type (sinfo, SYNCDAEMON_SHARE_INFO_TYPE_SHARE); |
210 | + else |
211 | + syncdaemon_share_info_set_share_type (sinfo, SYNCDAEMON_SHARE_INFO_TYPE_UNKNOWN); |
212 | + } |
213 | + |
214 | + return sinfo; |
215 | +} |
216 | + |
217 | +/** |
218 | + * syncdameon_share_info_get_name: |
219 | + */ |
220 | +const gchar * |
221 | +syncdaemon_share_info_get_name (SyncdaemonShareInfo *sinfo) |
222 | +{ |
223 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), NULL); |
224 | + |
225 | + return (const gchar *) sinfo->priv->name; |
226 | +} |
227 | + |
228 | +/** |
229 | + * syncdameon_share_info_set_name: |
230 | + */ |
231 | +void |
232 | +syncdaemon_share_info_set_name (SyncdaemonShareInfo *sinfo, const gchar *name) |
233 | +{ |
234 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
235 | + |
236 | + if (sinfo->priv->name != NULL) |
237 | + g_free (sinfo->priv->name); |
238 | + |
239 | + sinfo->priv->name = g_strdup (name); |
240 | +} |
241 | + |
242 | +/** |
243 | + * syncdameon_share_info_get_share_type: |
244 | + */ |
245 | +SyncdaemonShareInfoType |
246 | +syncdaemon_share_info_get_share_type (SyncdaemonShareInfo *sinfo) |
247 | +{ |
248 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), SYNCDAEMON_SHARE_INFO_TYPE_UNKNOWN); |
249 | + |
250 | + return sinfo->priv->type; |
251 | +} |
252 | + |
253 | +/** |
254 | + * syncdameon_share_info_set_share_type: |
255 | + */ |
256 | +void |
257 | +syncdaemon_share_info_set_share_type (SyncdaemonShareInfo *sinfo, SyncdaemonShareInfoType type) |
258 | +{ |
259 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
260 | + |
261 | + sinfo->priv->type = type; |
262 | +} |
263 | + |
264 | +/** |
265 | + * syncdameon_share_info_get_path: |
266 | + */ |
267 | +const gchar * |
268 | +syncdaemon_share_info_get_path (SyncdaemonShareInfo *sinfo) |
269 | +{ |
270 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), NULL); |
271 | + |
272 | + return (const gchar *) sinfo->priv->path; |
273 | +} |
274 | + |
275 | +/** |
276 | + * syncdameon_share_info_set_path: |
277 | + */ |
278 | +void |
279 | +syncdaemon_share_info_set_path (SyncdaemonShareInfo *sinfo, const gchar *path) |
280 | +{ |
281 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
282 | + |
283 | + if (sinfo->priv->path != NULL) |
284 | + g_free (sinfo->priv->path); |
285 | + |
286 | + sinfo->priv->path = g_strdup (path); |
287 | +} |
288 | + |
289 | +/** |
290 | + * syncdameon_share_info_get_username: |
291 | + */ |
292 | +const gchar * |
293 | +syncdaemon_share_info_get_username (SyncdaemonShareInfo *sinfo) |
294 | +{ |
295 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), NULL); |
296 | + |
297 | + return (const gchar *) sinfo->priv->username; |
298 | +} |
299 | + |
300 | +/** |
301 | + * syncdameon_share_info_set_username: |
302 | + */ |
303 | +void |
304 | +syncdaemon_share_info_set_username (SyncdaemonShareInfo *sinfo, const gchar *username) |
305 | +{ |
306 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
307 | + |
308 | + if (sinfo->priv->username != NULL) |
309 | + g_free (sinfo->priv->username); |
310 | + |
311 | + sinfo->priv->username = g_strdup (username); |
312 | +} |
313 | + |
314 | +/** |
315 | + * syncdameon_share_info_get_user_visible_name: |
316 | + */ |
317 | +const gchar * |
318 | +syncdaemon_share_info_get_user_visible_name (SyncdaemonShareInfo *sinfo) |
319 | +{ |
320 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), NULL); |
321 | + |
322 | + return (const gchar *) sinfo->priv->user_visible_name; |
323 | +} |
324 | + |
325 | +/** |
326 | + * syncdameon_share_info_set_user_visible_name: |
327 | + */ |
328 | +void |
329 | +syncdaemon_share_info_set_user_visible_name (SyncdaemonShareInfo *sinfo, const gchar *user_visible_name) |
330 | +{ |
331 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
332 | + |
333 | + if (sinfo->priv->user_visible_name != NULL) |
334 | + g_free (sinfo->priv->user_visible_name); |
335 | + |
336 | + sinfo->priv->user_visible_name = g_strdup (user_visible_name); |
337 | +} |
338 | + |
339 | +/** |
340 | + * syncdameon_share_info_get_node_id: |
341 | + */ |
342 | +const gchar * |
343 | +syncdaemon_share_info_get_node_id (SyncdaemonShareInfo *sinfo) |
344 | +{ |
345 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), NULL); |
346 | + |
347 | + return (const gchar *) sinfo->priv->node_id; |
348 | +} |
349 | + |
350 | +/** |
351 | + * syncdameon_share_info_set_node_id: |
352 | + */ |
353 | +void |
354 | +syncdaemon_share_info_set_node_id (SyncdaemonShareInfo *sinfo, const gchar *node_id) |
355 | +{ |
356 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
357 | + |
358 | + if (sinfo->priv->node_id != NULL) |
359 | + g_free (sinfo->priv->node_id); |
360 | + |
361 | + sinfo->priv->node_id = g_strdup (node_id); |
362 | +} |
363 | + |
364 | +/** |
365 | + * syncdameon_share_info_get_volume_id: |
366 | + */ |
367 | +const gchar * |
368 | +syncdaemon_share_info_get_volume_id (SyncdaemonShareInfo *sinfo) |
369 | +{ |
370 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), NULL); |
371 | + |
372 | + return (const gchar *) sinfo->priv->volume_id; |
373 | +} |
374 | + |
375 | +/** |
376 | + * syncdameon_share_info_set_volume_id: |
377 | + */ |
378 | +void |
379 | +syncdaemon_share_info_set_volume_id (SyncdaemonShareInfo *sinfo, const gchar *volume_id) |
380 | +{ |
381 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
382 | + |
383 | + if (sinfo->priv->volume_id != NULL) |
384 | + g_free (sinfo->priv->volume_id); |
385 | + |
386 | + sinfo->priv->volume_id = g_strdup (volume_id); |
387 | +} |
388 | + |
389 | +/** |
390 | + * syncdameon_share_info_get_accepted: |
391 | + */ |
392 | +gboolean |
393 | +syncdaemon_share_info_get_accepted (SyncdaemonShareInfo *sinfo) |
394 | +{ |
395 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), FALSE); |
396 | + |
397 | + return sinfo->priv->accepted; |
398 | +} |
399 | + |
400 | +/** |
401 | + * syncdameon_share_info_set_accepted: |
402 | + */ |
403 | +void |
404 | +syncdaemon_share_info_set_accepted (SyncdaemonShareInfo *sinfo, gboolean accepted) |
405 | +{ |
406 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
407 | + |
408 | + sinfo->priv->accepted = accepted; |
409 | +} |
410 | + |
411 | +/** |
412 | + * syncdameon_share_info_get_allow_modifications: |
413 | + */ |
414 | +gboolean |
415 | +syncdaemon_share_info_get_allow_modifications (SyncdaemonShareInfo *sinfo) |
416 | +{ |
417 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo), FALSE); |
418 | + |
419 | + return sinfo->priv->allow_modifications; |
420 | +} |
421 | + |
422 | +/** |
423 | + * syncdameon_share_info_set_allow_modifications: |
424 | + */ |
425 | +void |
426 | +syncdaemon_share_info_set_allow_modifications (SyncdaemonShareInfo *sinfo, gboolean allow_modifications) |
427 | +{ |
428 | + g_return_if_fail (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
429 | + |
430 | + sinfo->priv->allow_modifications = allow_modifications; |
431 | +} |
432 | |
433 | === added file 'libsyncdaemon/syncdaemon-share-info.h' |
434 | --- libsyncdaemon/syncdaemon-share-info.h 1970-01-01 00:00:00 +0000 |
435 | +++ libsyncdaemon/syncdaemon-share-info.h 2010-07-23 10:31:40 +0000 |
436 | @@ -0,0 +1,78 @@ |
437 | +/* |
438 | + * Syncdaemon API |
439 | + * |
440 | + * Authors: Rodrigo Moya <rodrigo.moya@canonical.com> |
441 | + * |
442 | + * Copyright 2010 Canonical Ltd. |
443 | + * |
444 | + * This program is free software: you can redistribute it and/or modify it |
445 | + * under the terms of the GNU General Public License version 3, as published |
446 | + * by the Free Software Foundation. |
447 | + * |
448 | + * This program is distributed in the hope that it will be useful, but |
449 | + * WITHOUT ANY WARRANTY; without even the implied warranties of |
450 | + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
451 | + * PURPOSE. See the GNU General Public License for more details. |
452 | + * |
453 | + * You should have received a copy of the GNU General Public License along |
454 | + * with this program. If not, see <http://www.gnu.org/licenses/>. |
455 | + * |
456 | + */ |
457 | + |
458 | +#ifndef __SYNCDAEMON_SHARE_INFO_H__ |
459 | +#define __SYNCDAEMON_SHARE_INFO_H__ |
460 | + |
461 | +#include <glib-object.h> |
462 | + |
463 | +G_BEGIN_DECLS |
464 | + |
465 | +#define SYNCDAEMON_TYPE_SHARE_INFO (syncdaemon_share_info_get_type ()) |
466 | +#define SYNCDAEMON_SHARE_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SYNCDAEMON_TYPE_SHARE_INFO, SyncdaemonShareInfo)) |
467 | +#define SYNCDAEMON_IS_SHARE_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SYNCDAEMON_TYPE_SHARE_INFO)) |
468 | +#define SYNCDAEMON_SHARE_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SYNCDAEMON_TYPE_SHARE_INFO, SyncdaemonShareInfoClass)) |
469 | +#define SYNCDAEMON_IS_SHARE_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SYNCDAEMON_TYPE_SHARE_INFO)) |
470 | +#define SYNCDAEMON_SHARE_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SYNCDAEMON_TYPE_SHARE_INFO, SyncdaemonShareInfoClass)) |
471 | + |
472 | +typedef struct _SyncdaemonShareInfoPrivate SyncdaemonShareInfoPrivate; |
473 | + |
474 | +typedef struct { |
475 | + GObject parent; |
476 | + SyncdaemonShareInfoPrivate *priv; |
477 | +} SyncdaemonShareInfo; |
478 | + |
479 | +typedef struct { |
480 | + GObjectClass parent_class; |
481 | +} SyncdaemonShareInfoClass; |
482 | + |
483 | +typedef enum { |
484 | + SYNCDAEMON_SHARE_INFO_TYPE_UNKNOWN, |
485 | + SYNCDAEMON_SHARE_INFO_TYPE_SHARED, |
486 | + SYNCDAEMON_SHARE_INFO_TYPE_SHARE |
487 | +} SyncdaemonShareInfoType; |
488 | + |
489 | +GType syncdaemon_share_info_get_type (void); |
490 | +SyncdaemonShareInfo *syncdaemon_share_info_new (void); |
491 | +SyncdaemonShareInfo *syncdaemon_share_info_new_from_hash_table (GHashTable *hash); |
492 | + |
493 | +const gchar *syncdaemon_share_info_get_name (SyncdaemonShareInfo *sinfo); |
494 | +void syncdaemon_share_info_set_name (SyncdaemonShareInfo *sinfo, const gchar *name); |
495 | +SyncdaemonShareInfoType syncdaemon_share_info_get_share_type (SyncdaemonShareInfo *sinfo); |
496 | +void syncdaemon_share_info_set_share_type (SyncdaemonShareInfo *sinfo, SyncdaemonShareInfoType type); |
497 | +const gchar *syncdaemon_share_info_get_path (SyncdaemonShareInfo *sinfo); |
498 | +void syncdaemon_share_info_set_path (SyncdaemonShareInfo *sinfo, const gchar *path); |
499 | +const gchar *syncdaemon_share_info_get_username (SyncdaemonShareInfo *sinfo); |
500 | +void syncdaemon_share_info_set_username (SyncdaemonShareInfo *sinfo, const gchar *username); |
501 | +const gchar *syncdaemon_share_info_get_user_visible_name (SyncdaemonShareInfo *sinfo); |
502 | +void syncdaemon_share_info_set_user_visible_name (SyncdaemonShareInfo *sinfo, const gchar *user_visible_name); |
503 | +const gchar *syncdaemon_share_info_get_node_id (SyncdaemonShareInfo *sinfo); |
504 | +void syncdaemon_share_info_set_node_id (SyncdaemonShareInfo *sinfo, const gchar *node_id); |
505 | +const gchar *syncdaemon_share_info_get_volume_id (SyncdaemonShareInfo *sinfo); |
506 | +void syncdaemon_share_info_set_volume_id (SyncdaemonShareInfo *sinfo, const gchar *volume_id); |
507 | +gboolean syncdaemon_share_info_get_accepted (SyncdaemonShareInfo *sinfo); |
508 | +void syncdaemon_share_info_set_accepted (SyncdaemonShareInfo *sinfo, gboolean accepted); |
509 | +gboolean syncdaemon_share_info_get_allow_modifications (SyncdaemonShareInfo *sinfo); |
510 | +void syncdaemon_share_info_set_allow_modifications (SyncdaemonShareInfo *sinfo, gboolean allow_modifications); |
511 | + |
512 | +G_END_DECLS |
513 | + |
514 | +#endif |
515 | |
516 | === modified file 'libsyncdaemon/syncdaemon-shares-interface.c' |
517 | --- libsyncdaemon/syncdaemon-shares-interface.c 2010-07-12 17:06:17 +0000 |
518 | +++ libsyncdaemon/syncdaemon-shares-interface.c 2010-07-23 10:31:40 +0000 |
519 | @@ -27,6 +27,8 @@ |
520 | |
521 | struct _SyncdaemonSharesInterfacePrivate { |
522 | GObject *proxy; |
523 | + GHashTable *shared; |
524 | + GHashTable *shares; |
525 | }; |
526 | |
527 | static void |
528 | @@ -50,47 +52,105 @@ |
529 | } |
530 | |
531 | static void |
532 | -share_created_cb (DBusGProxy *proxy, GHashTable *share_info, gpointer user_data) |
533 | +share_created_cb (DBusGProxy *proxy, GHashTable *hash, gpointer user_data) |
534 | { |
535 | SyncdaemonDaemon *daemon = NULL; |
536 | + SyncdaemonShareInfo *share_info; |
537 | SyncdaemonSharesInterface *interface = SYNCDAEMON_SHARES_INTERFACE (user_data); |
538 | |
539 | + share_info = syncdaemon_share_info_new_from_hash_table (hash); |
540 | + switch (syncdaemon_share_info_get_share_type (share_info)) { |
541 | + case SYNCDAEMON_SHARE_INFO_TYPE_SHARED: |
542 | + if (interface->priv->shared == NULL) { |
543 | + GSList *shared; |
544 | + |
545 | + shared = syncdaemon_shares_interface_get_shared (interface); |
546 | + g_slist_free (shared); |
547 | + } |
548 | + |
549 | + g_hash_table_insert (interface->priv->shared, |
550 | + g_strdup (syncdaemon_share_info_get_path (share_info)), |
551 | + share_info); |
552 | + break; |
553 | + case SYNCDAEMON_SHARE_INFO_TYPE_SHARE: |
554 | + if (interface->priv->shares == NULL) { |
555 | + GSList *shares; |
556 | + |
557 | + shares = syncdaemon_shares_interface_get_shares (interface); |
558 | + g_slist_free (shares); |
559 | + } |
560 | + |
561 | + g_hash_table_insert (interface->priv->shares, |
562 | + g_strdup (syncdaemon_share_info_get_path (share_info)), |
563 | + share_info); |
564 | + break; |
565 | + default: |
566 | + return; |
567 | + } |
568 | + |
569 | g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
570 | if (daemon != NULL) |
571 | g_signal_emit_by_name (daemon, "share_created", TRUE, share_info); |
572 | } |
573 | |
574 | static void |
575 | -share_create_error_cb (DBusGProxy *proxy, GHashTable *share_info, const gchar *error, gpointer user_data) |
576 | +share_create_error_cb (DBusGProxy *proxy, GHashTable *hash, const gchar *error, gpointer user_data) |
577 | { |
578 | SyncdaemonDaemon *daemon = NULL; |
579 | SyncdaemonSharesInterface *interface = SYNCDAEMON_SHARES_INTERFACE (user_data); |
580 | |
581 | g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
582 | - if (daemon != NULL) |
583 | + if (daemon != NULL) { |
584 | + SyncdaemonShareInfo *share_info; |
585 | + |
586 | + share_info = syncdaemon_share_info_new_from_hash_table (hash); |
587 | g_signal_emit_by_name (daemon, "share_created", FALSE, share_info); |
588 | + g_object_unref (G_OBJECT (share_info)); |
589 | + } |
590 | } |
591 | |
592 | static void |
593 | -share_deleted_cb (DBusGProxy *proxy, GHashTable *share_info, gpointer user_data) |
594 | +share_deleted_cb (DBusGProxy *proxy, GHashTable *hash, gpointer user_data) |
595 | { |
596 | SyncdaemonDaemon *daemon = NULL; |
597 | + SyncdaemonShareInfo *share_info; |
598 | SyncdaemonSharesInterface *interface = SYNCDAEMON_SHARES_INTERFACE (user_data); |
599 | |
600 | + share_info = syncdaemon_share_info_new_from_hash_table (hash); |
601 | + switch (syncdaemon_share_info_get_share_type (share_info)) { |
602 | + case SYNCDAEMON_SHARE_INFO_TYPE_SHARED: |
603 | + if (interface->priv->shared != NULL) |
604 | + g_hash_table_remove (interface->priv->shared, syncdaemon_share_info_get_path (share_info)); |
605 | + break; |
606 | + case SYNCDAEMON_SHARE_INFO_TYPE_SHARE: |
607 | + if (interface->priv->shares != NULL) |
608 | + g_hash_table_remove (interface->priv->shares, syncdaemon_share_info_get_path (share_info)); |
609 | + break; |
610 | + default: |
611 | + return; |
612 | + } |
613 | + |
614 | g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
615 | if (daemon != NULL) |
616 | g_signal_emit_by_name (daemon, "share_deleted", TRUE, share_info); |
617 | + |
618 | + g_object_unref (G_OBJECT (share_info)); |
619 | } |
620 | |
621 | static void |
622 | -share_delete_error_cb (DBusGProxy *proxy, GHashTable *share_info, const gchar *error, gpointer user_data) |
623 | +share_delete_error_cb (DBusGProxy *proxy, GHashTable *hash, const gchar *error, gpointer user_data) |
624 | { |
625 | SyncdaemonDaemon *daemon = NULL; |
626 | SyncdaemonSharesInterface *interface = SYNCDAEMON_SHARES_INTERFACE (user_data); |
627 | |
628 | g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
629 | - if (daemon != NULL) |
630 | + if (daemon != NULL) { |
631 | + SyncdaemonShareInfo *share_info; |
632 | + |
633 | + share_info = syncdaemon_share_info_new_from_hash_table (hash); |
634 | g_signal_emit_by_name (daemon, "share_deleted", FALSE, share_info); |
635 | + g_object_unref (G_OBJECT (share_info)); |
636 | + } |
637 | } |
638 | |
639 | static void |
640 | @@ -224,53 +284,122 @@ |
641 | G_TYPE_INVALID); |
642 | } |
643 | |
644 | -static void |
645 | -got_shared_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data) |
646 | -{ |
647 | - GSList *shared_list; |
648 | - SyncdaemonSharesInterface *interface = SYNCDAEMON_SHARES_INTERFACE (user_data); |
649 | - SyncdaemonDaemon *daemon = NULL; |
650 | - GError *error = NULL; |
651 | - |
652 | - g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
653 | - |
654 | - if (!dbus_g_proxy_end_call (proxy, call_id, &error, |
655 | - dbus_g_type_get_collection ("GSList", |
656 | - dbus_g_type_get_map ( |
657 | - "GHashTable", |
658 | - G_TYPE_STRING, |
659 | - G_TYPE_STRING)), |
660 | - &shared_list, |
661 | - G_TYPE_INVALID)) { |
662 | - if (daemon != NULL) { |
663 | - g_signal_emit_by_name (daemon, "error", error->message, NULL); |
664 | - g_error_free (error); |
665 | - |
666 | - return; |
667 | - } |
668 | - } |
669 | - |
670 | - while (shared_list != NULL) { |
671 | - GHashTable *share_info = shared_list->data; |
672 | - |
673 | - share_created_cb (proxy, share_info, interface); |
674 | - |
675 | - shared_list = g_slist_remove (shared_list, share_info); |
676 | - g_hash_table_unref (share_info); |
677 | - } |
678 | -} |
679 | - |
680 | /** |
681 | * syncdaemon_shares_interface_get_shared: |
682 | */ |
683 | -void |
684 | +GSList * |
685 | syncdaemon_shares_interface_get_shared (SyncdaemonSharesInterface *interface) |
686 | { |
687 | - g_return_if_fail (SYNCDAEMON_IS_SHARES_INTERFACE (interface)); |
688 | - |
689 | - dbus_g_proxy_begin_call (DBUS_G_PROXY (interface->priv->proxy), "get_shared", |
690 | - got_shared_cb, interface, NULL, |
691 | - G_TYPE_INVALID); |
692 | + GHashTableIter iter; |
693 | + gchar *path; |
694 | + SyncdaemonShareInfo *share_info; |
695 | + GSList *shared_list, *returned_list = NULL;; |
696 | + GError *error = NULL; |
697 | + |
698 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARES_INTERFACE (interface), NULL); |
699 | + |
700 | + if (interface->priv->shared == NULL) { |
701 | + interface->priv->shared = g_hash_table_new_full (g_str_hash, g_str_equal, |
702 | + g_free, g_object_unref); |
703 | + |
704 | + if (dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "get_shared", &error, |
705 | + G_TYPE_INVALID, |
706 | + dbus_g_type_get_collection ("GSList", |
707 | + dbus_g_type_get_map ( |
708 | + "GHashTable", |
709 | + G_TYPE_STRING, |
710 | + G_TYPE_STRING)), &shared_list, |
711 | + G_TYPE_INVALID)) { |
712 | + while (shared_list != NULL) { |
713 | + GHashTable *hash = (GHashTable *) shared_list->data; |
714 | + |
715 | + share_info = syncdaemon_share_info_new_from_hash_table (hash); |
716 | + |
717 | + shared_list = g_slist_remove (shared_list, hash); |
718 | + g_hash_table_unref (hash); |
719 | + |
720 | + g_hash_table_insert (interface->priv->shared, |
721 | + g_strdup (syncdaemon_share_info_get_path (share_info)), |
722 | + share_info); |
723 | + } |
724 | + } else { |
725 | + SyncdaemonDaemon *daemon = NULL; |
726 | + |
727 | + g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
728 | + if (daemon != NULL) |
729 | + g_signal_emit_by_name (daemon, "error", error->message, NULL); |
730 | + |
731 | + g_error_free (error); |
732 | + |
733 | + return NULL; |
734 | + } |
735 | + } |
736 | + |
737 | + /* Create the list to be returned */ |
738 | + g_hash_table_iter_init (&iter, interface->priv->shared); |
739 | + while (g_hash_table_iter_next (&iter, (gpointer *) &path, (gpointer *) &share_info)) |
740 | + returned_list = g_slist_append (returned_list, share_info); |
741 | + |
742 | + return returned_list; |
743 | +} |
744 | + |
745 | +/** |
746 | + * syncdaemon_shares_interface_get_shares: |
747 | + */ |
748 | +GSList * |
749 | +syncdaemon_shares_interface_get_shares (SyncdaemonSharesInterface *interface) |
750 | +{ |
751 | + GHashTableIter iter; |
752 | + gchar *path; |
753 | + SyncdaemonShareInfo *share_info; |
754 | + GSList *shares_list, *returned_list = NULL;; |
755 | + GError *error = NULL; |
756 | + |
757 | + g_return_val_if_fail (SYNCDAEMON_IS_SHARES_INTERFACE (interface), NULL); |
758 | + |
759 | + if (interface->priv->shares == NULL) { |
760 | + interface->priv->shares = g_hash_table_new_full (g_str_hash, g_str_equal, |
761 | + g_free, g_object_unref); |
762 | + |
763 | + if (dbus_g_proxy_call (DBUS_G_PROXY (interface->priv->proxy), "get_shares", &error, |
764 | + G_TYPE_INVALID, |
765 | + dbus_g_type_get_collection ("GSList", |
766 | + dbus_g_type_get_map ( |
767 | + "GHashTable", |
768 | + G_TYPE_STRING, |
769 | + G_TYPE_STRING)), &shares_list, |
770 | + G_TYPE_INVALID)) { |
771 | + while (shares_list != NULL) { |
772 | + GHashTable *hash = (GHashTable *) shares_list->data; |
773 | + |
774 | + share_info = syncdaemon_share_info_new_from_hash_table (hash); |
775 | + |
776 | + shares_list = g_slist_remove (shares_list, hash); |
777 | + g_hash_table_unref (hash); |
778 | + |
779 | + g_hash_table_insert (interface->priv->shares, |
780 | + g_strdup (syncdaemon_share_info_get_path (share_info)), |
781 | + share_info); |
782 | + } |
783 | + } else { |
784 | + SyncdaemonDaemon *daemon = NULL; |
785 | + |
786 | + g_object_get (G_OBJECT (interface), "daemon", &daemon, NULL); |
787 | + if (daemon != NULL) |
788 | + g_signal_emit_by_name (daemon, "error", error->message, NULL); |
789 | + |
790 | + g_error_free (error); |
791 | + |
792 | + return NULL; |
793 | + } |
794 | + } |
795 | + |
796 | + /* Create the list to be returned */ |
797 | + g_hash_table_iter_init (&iter, interface->priv->shares); |
798 | + while (g_hash_table_iter_next (&iter, (gpointer) &path, (gpointer) &share_info)) |
799 | + returned_list = g_slist_append (returned_list, share_info); |
800 | + |
801 | + return returned_list; |
802 | } |
803 | |
804 | /** |
805 | |
806 | === modified file 'libsyncdaemon/syncdaemon-shares-interface.h' |
807 | --- libsyncdaemon/syncdaemon-shares-interface.h 2010-07-12 17:06:17 +0000 |
808 | +++ libsyncdaemon/syncdaemon-shares-interface.h 2010-07-23 10:31:40 +0000 |
809 | @@ -56,8 +56,8 @@ |
810 | const gchar *name, |
811 | gboolean allow_modifications); |
812 | void syncdaemon_shares_interface_delete (SyncdaemonSharesInterface *interface, const gchar *share_id); |
813 | -void syncdaemon_shares_interface_get_shared (SyncdaemonSharesInterface *interface); |
814 | -void syncdaemon_shares_interface_get_shares (SyncdaemonSharesInterface *interface); |
815 | +GSList *syncdaemon_shares_interface_get_shared (SyncdaemonSharesInterface *interface); |
816 | +GSList *syncdaemon_shares_interface_get_shares (SyncdaemonSharesInterface *interface); |
817 | void syncdaemon_shares_interface_refresh (SyncdaemonSharesInterface *interface); |
818 | void syncdaemon_shares_interface_reject (SyncdaemonSharesInterface *interface, const gchar *share_id); |
819 | |
820 | |
821 | === modified file 'libsyncdaemon/test-libsyncdaemon.c' |
822 | --- libsyncdaemon/test-libsyncdaemon.c 2010-06-24 11:06:24 +0000 |
823 | +++ libsyncdaemon/test-libsyncdaemon.c 2010-07-23 10:31:40 +0000 |
824 | @@ -28,6 +28,7 @@ |
825 | #define TEST_ID "abcdefeghijk" |
826 | #define TEST_HASH "1234567890abcdef" |
827 | |
828 | +static GMainLoop *main_loop = NULL; |
829 | static SyncdaemonDaemon *the_daemon = NULL; |
830 | |
831 | static void |
832 | @@ -199,6 +200,103 @@ |
833 | } |
834 | |
835 | static void |
836 | +test_share_info (void) |
837 | +{ |
838 | + SyncdaemonShareInfo *sinfo; |
839 | + GHashTable *hash; |
840 | + |
841 | + /* Test creating an empty SyncdaemonShareInfo */ |
842 | + sinfo = syncdaemon_share_info_new (); |
843 | + g_assert (SYNCDAEMON_IS_SHARE_INFO (sinfo)); |
844 | + |
845 | + syncdaemon_share_info_set_name (sinfo, TEST_NAME); |
846 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_name (sinfo), TEST_NAME) == 0); |
847 | + |
848 | + syncdaemon_share_info_set_share_type (sinfo, SYNCDAEMON_SHARE_INFO_TYPE_SHARED); |
849 | + g_assert (syncdaemon_share_info_get_share_type (sinfo) == SYNCDAEMON_SHARE_INFO_TYPE_SHARED); |
850 | + |
851 | + syncdaemon_share_info_set_path (sinfo, TEST_PATH); |
852 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_path (sinfo), TEST_PATH) == 0); |
853 | + |
854 | + syncdaemon_share_info_set_username (sinfo, TEST_NAME); |
855 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_username (sinfo), TEST_NAME) == 0); |
856 | + |
857 | + syncdaemon_share_info_set_user_visible_name (sinfo, TEST_NAME); |
858 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_user_visible_name (sinfo), TEST_NAME) == 0); |
859 | + |
860 | + syncdaemon_share_info_set_node_id (sinfo, TEST_ID); |
861 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_node_id (sinfo), TEST_ID) == 0); |
862 | + |
863 | + syncdaemon_share_info_set_volume_id (sinfo, TEST_ID); |
864 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_volume_id (sinfo), TEST_ID) == 0); |
865 | + |
866 | + syncdaemon_share_info_set_accepted (sinfo, TRUE); |
867 | + g_assert (syncdaemon_share_info_get_accepted (sinfo) == TRUE); |
868 | + |
869 | + syncdaemon_share_info_set_allow_modifications (sinfo, FALSE); |
870 | + g_assert (syncdaemon_share_info_get_allow_modifications (sinfo) == FALSE); |
871 | + |
872 | + g_object_unref (G_OBJECT (sinfo)); |
873 | + |
874 | + /* Test creating a SyncdaemonShareInfo from a hash table */ |
875 | + hash = g_hash_table_new (g_str_hash, g_str_equal); |
876 | + g_hash_table_insert (hash, "name", TEST_NAME); |
877 | + g_hash_table_insert (hash, "type", "Shared"); |
878 | + g_hash_table_insert (hash, "path", TEST_PATH); |
879 | + g_hash_table_insert (hash, "other_username", TEST_NAME); |
880 | + g_hash_table_insert (hash, "other_visible_name", TEST_NAME); |
881 | + g_hash_table_insert (hash, "node_id", TEST_ID); |
882 | + g_hash_table_insert (hash, "volume_id", TEST_ID); |
883 | + g_hash_table_insert (hash, "accepted", "True"); |
884 | + g_hash_table_insert (hash, "access_level", "View"); |
885 | + |
886 | + sinfo = syncdaemon_share_info_new_from_hash_table (hash); |
887 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_name (sinfo), TEST_NAME) == 0); |
888 | + g_assert (syncdaemon_share_info_get_share_type (sinfo) == SYNCDAEMON_SHARE_INFO_TYPE_SHARED); |
889 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_path (sinfo), TEST_PATH) == 0); |
890 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_username (sinfo), TEST_NAME) == 0); |
891 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_user_visible_name (sinfo), TEST_NAME) == 0); |
892 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_node_id (sinfo), TEST_ID) == 0); |
893 | + g_assert (g_strcmp0 (syncdaemon_share_info_get_volume_id (sinfo), TEST_ID) == 0); |
894 | + g_assert (syncdaemon_share_info_get_accepted (sinfo) == TRUE); |
895 | + g_assert (syncdaemon_share_info_get_allow_modifications (sinfo) == FALSE); |
896 | + |
897 | + g_object_unref (G_OBJECT (sinfo)); |
898 | +} |
899 | + |
900 | +static void |
901 | +test_shares (void) |
902 | +{ |
903 | + GSList *list; |
904 | + SyncdaemonSharesInterface *shares; |
905 | + |
906 | + shares = (SyncdaemonSharesInterface *) syncdaemon_daemon_get_shares_interface (the_daemon); |
907 | + g_assert (SYNCDAEMON_IS_SHARES_INTERFACE (shares)); |
908 | + |
909 | + /* Get shared folders */ |
910 | + list = syncdaemon_shares_interface_get_shared (shares); |
911 | + while (list != NULL) { |
912 | + SyncdaemonShareInfo *share_info = list->data; |
913 | + |
914 | + g_assert (SYNCDAEMON_IS_SHARE_INFO (share_info)); |
915 | + g_assert (syncdaemon_share_info_get_share_type (share_info) == SYNCDAEMON_SHARE_INFO_TYPE_SHARED); |
916 | + |
917 | + list = g_slist_remove (list, share_info); |
918 | + } |
919 | + |
920 | + /* Get shares */ |
921 | + list = syncdaemon_shares_interface_get_shares (shares); |
922 | + while (list != NULL) { |
923 | + SyncdaemonShareInfo *share_info = list->data; |
924 | + |
925 | + g_assert (SYNCDAEMON_IS_SHARE_INFO (share_info)); |
926 | + g_assert (syncdaemon_share_info_get_share_type (share_info) == SYNCDAEMON_SHARE_INFO_TYPE_SHARE); |
927 | + |
928 | + list = g_slist_remove (list, share_info); |
929 | + } |
930 | +} |
931 | + |
932 | +static void |
933 | test_status (void) |
934 | { |
935 | GSList *list; |
936 | @@ -325,16 +423,23 @@ |
937 | show_hash_table (event_dict); |
938 | } |
939 | |
940 | +static void |
941 | +daemon_ready_cb (SyncdaemonDaemon daemon, gpointer user_data) |
942 | +{ |
943 | + g_test_run (); |
944 | + |
945 | + g_main_loop_quit (main_loop); |
946 | +} |
947 | + |
948 | int |
949 | main (int argc, gchar *argv[]) |
950 | { |
951 | - GMainLoop *main_loop; |
952 | - |
953 | g_type_init (); |
954 | g_test_init (&argc, &argv, NULL); |
955 | |
956 | /* Initialize main object */ |
957 | the_daemon = syncdaemon_daemon_new (); |
958 | + g_signal_connect (G_OBJECT (the_daemon), "ready", G_CALLBACK (daemon_ready_cb), NULL); |
959 | g_signal_connect (G_OBJECT (the_daemon), "connected", G_CALLBACK (daemon_connected_cb), NULL); |
960 | g_signal_connect (G_OBJECT (the_daemon), "disconnected", G_CALLBACK (daemon_disconnected_cb), NULL); |
961 | g_signal_connect (G_OBJECT (the_daemon), "event", G_CALLBACK (daemon_event_cb), NULL); |
962 | @@ -347,11 +452,15 @@ |
963 | g_test_add_func ("/testlibsyncdaemon/TestFolders", test_folders); |
964 | g_test_add_func ("/testlibsyncdaemon/TestMetadata", test_metadata); |
965 | g_test_add_func ("/testlibsyncdaemon/TestPublicFiles", test_public_files); |
966 | + g_test_add_func ("/testlibsyncdaemon/TestShareInfo", test_share_info); |
967 | + g_test_add_func ("/testlibsyncdaemon/TestShares", test_shares); |
968 | g_test_add_func ("/testlibsyncdaemon/TestStatus", test_status); |
969 | g_test_add_func ("/testlibsyncdaemon/TestStatusInfo", test_status_info); |
970 | g_test_add_func ("/testlibsyncdaemon/TestTransferInfo", test_transfer_info); |
971 | |
972 | /* Run main loop and tests suite */ |
973 | - //main_loop = g_main_loop_new (NULL, TRUE); |
974 | - return g_test_run (); |
975 | + main_loop = g_main_loop_new (NULL, TRUE); |
976 | + g_main_loop_run (main_loop); |
977 | + |
978 | + return 0; |
979 | } |
980 | |
981 | === modified file 'nautilus/location-widget.c' |
982 | --- nautilus/location-widget.c 2010-07-20 14:52:23 +0000 |
983 | +++ nautilus/location-widget.c 2010-07-23 10:31:40 +0000 |
984 | @@ -136,6 +136,105 @@ |
985 | object_class->finalize = location_widget_finalize; |
986 | } |
987 | |
988 | +static gboolean |
989 | +check_shared_for_folder (LocationWidget *location, SyncdaemonFolderInfo *folder_info) |
990 | +{ |
991 | + SyncdaemonInterface *interface; |
992 | + GHashTable *shares = NULL; |
993 | + gboolean result = TRUE; |
994 | + |
995 | + interface = syncdaemon_daemon_get_shares_interface (location->uon->syncdaemon); |
996 | + if (SYNCDAEMON_IS_SHARES_INTERFACE (interface)) { |
997 | + GSList *shared_list, *l; |
998 | + |
999 | + shared_list = syncdaemon_shares_interface_get_shared (SYNCDAEMON_SHARES_INTERFACE (interface)); |
1000 | + for (l = shared_list; l != NULL; l = l->next) { |
1001 | + SyncdaemonShareInfo *share_info = SYNCDAEMON_SHARE_INFO (shared_list->data); |
1002 | + |
1003 | + if (g_str_has_prefix (syncdaemon_share_info_get_path (share_info), |
1004 | + syncdaemon_folder_info_get_path (folder_info)) |
1005 | + && syncdaemon_share_info_get_accepted (share_info)) { |
1006 | + gchar *path; |
1007 | + const gchar *username; |
1008 | + GSList *users = NULL; |
1009 | + |
1010 | + if (shares == NULL) |
1011 | + shares = g_hash_table_new (g_str_hash, g_str_equal); |
1012 | + |
1013 | + g_hash_table_lookup_extended (shares, |
1014 | + syncdaemon_share_info_get_path (share_info), |
1015 | + (gpointer *) &path, |
1016 | + (gpointer *) &users); |
1017 | + |
1018 | + /* Add the share and the user it's shared with to the hash table */ |
1019 | + if (syncdaemon_share_info_get_user_visible_name (share_info) != NULL) |
1020 | + username = syncdaemon_share_info_get_user_visible_name (share_info); |
1021 | + else |
1022 | + username = syncdaemon_share_info_get_username (share_info); |
1023 | + |
1024 | + users = g_slist_append (users, (gpointer) username); |
1025 | + g_hash_table_insert (shares, |
1026 | + (gpointer) syncdaemon_share_info_get_path (share_info), |
1027 | + (gpointer) users); |
1028 | + } |
1029 | + } |
1030 | + |
1031 | + g_slist_free (shared_list); |
1032 | + |
1033 | + /* If there are shares, ask the user what to do */ |
1034 | + if (shares != NULL) { |
1035 | + GtkWidget *dialog; |
1036 | + GHashTableIter iter; |
1037 | + GString *question; |
1038 | + gchar *path; |
1039 | + GSList *users; |
1040 | + |
1041 | + question = g_string_new (_("This folder contains folders that have been shared:\n")); |
1042 | + |
1043 | + g_hash_table_iter_init (&iter, shares); |
1044 | + while (g_hash_table_iter_next (&iter, (gpointer) &path, (gpointer) &users)) { |
1045 | + gint count = 0; |
1046 | + |
1047 | + question = g_string_append (question, "\t- "); |
1048 | + question = g_string_append (question, path); |
1049 | + question = g_string_append (question, " ("); |
1050 | + |
1051 | + while (users != NULL) { |
1052 | + gchar *username = (gchar *) users->data; |
1053 | + |
1054 | + if (count > 0) |
1055 | + question = g_string_append (question, ", "); |
1056 | + question = g_string_append (question, username); |
1057 | + |
1058 | + users = g_slist_remove (users, username); |
1059 | + count += 1; |
1060 | + } |
1061 | + |
1062 | + question = g_string_append (question, ")\n"); |
1063 | + } |
1064 | + |
1065 | + question = g_string_append (question, _("This action will un-share these items. Other users" |
1066 | + " will no longer be able to access these files." |
1067 | + " Would you like to proceed?")); |
1068 | + |
1069 | + dialog = gtk_message_dialog_new ( |
1070 | + GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (location))), |
1071 | + 0, GTK_MESSAGE_QUESTION, |
1072 | + GTK_BUTTONS_YES_NO, |
1073 | + question->str); |
1074 | + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) |
1075 | + result = FALSE; |
1076 | + |
1077 | + gtk_widget_destroy (dialog); |
1078 | + g_string_free (question, TRUE); |
1079 | + g_hash_table_destroy (shares); |
1080 | + } |
1081 | + |
1082 | + } |
1083 | + |
1084 | + return result; |
1085 | +} |
1086 | + |
1087 | static void |
1088 | disable_u1_cb (GtkButton *button, gpointer user_data) |
1089 | { |
1090 | @@ -150,7 +249,7 @@ |
1091 | folder_info = syncdaemon_folders_interface_get_info ( |
1092 | SYNCDAEMON_FOLDERS_INTERFACE (interface), |
1093 | location->path); |
1094 | - if (folder_info != NULL) { |
1095 | + if (folder_info != NULL && check_shared_for_folder (location, folder_info)) { |
1096 | set_label_text (location, FALSE); |
1097 | gtk_widget_hide (location->disable_button); |
1098 | gtk_widget_show (location->enable_button); |
Tests are failing for me with this trace:
nessita@ miro:~/ canonical/ ubuntuone- client/ review_ check-before- disabling$ ./libsyncdaemon /test-libsyncda emon mon/TestDaemon: interface_ get_proxy_ object: assertion `SYNCDAEMON_ IS_INTERFACE (interface)' failed
/testlibsyncdae
** CRITICAL **: syncdaemon_
aborting...
Trace/breakpoint trap (core dumped)
Not sure if this is a Needs Fixing or Information, I may be missing something?