Changeset 1262
- Timestamp:
- 11/27/06 23:15:12
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/bindings/python/Makefile.am (modified) (1 diff)
- trunk/bindings/python/tinymail.override (modified) (5 diffs)
- trunk/libtinymail-camel/tny-camel-folder.c (modified) (36 diffs)
- trunk/libtinymail-camel/tny-camel-folder.h (modified) (2 diffs)
- trunk/libtinymail-camel/tny-camel-msg-remove-strategy.c (modified) (3 diffs)
- trunk/libtinymail-camel/tny-camel-msg-remove-strategy.h (modified) (1 diff)
- trunk/libtinymail-camel/tny-camel-send-queue.c (modified) (5 diffs)
- trunk/libtinymail-camel/tny-camel-store-account.c (modified) (11 diffs)
- trunk/libtinymail-camel/tny-camel-store-account.h (modified) (1 diff)
- trunk/libtinymail/Makefile.am (modified) (2 diffs)
- trunk/libtinymail/tny-error.c (added)
- trunk/libtinymail/tny-error.h (added)
- trunk/libtinymail/tny-folder-store.c (modified) (16 diffs)
- trunk/libtinymail/tny-folder-store.h (modified) (2 diffs)
- trunk/libtinymail/tny-folder.c (modified) (28 diffs)
- trunk/libtinymail/tny-folder.h (modified) (4 diffs)
- trunk/libtinymail/tny-msg-remove-strategy.c (modified) (3 diffs)
- trunk/libtinymail/tny-msg-remove-strategy.h (modified) (1 diff)
- trunk/libtinymail/tny-shared.h (modified) (3 diffs)
- trunk/libtinymailui-gtk/tny-gtk-account-tree-model.c (modified) (2 diffs)
- trunk/libtinymailui-gtk/tny-gtk-header-list-model.c (modified) (1 diff)
- trunk/tinymail/tny-demoui-summary-view.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r1261 r1262 1 2006-11-27 Philip Van Hoof <pvanhoof@gnome.org> 2 3 * Added the first pieces for error reporting and support 4 * Added error reporting and checking in a lot methods and types 5 * Adapted the Python bindings to support error checking 6 7 * This was a major API change in all libraries 8 1 9 2006-11-27 Øystein Gisnås <oystein@gisnas.net> 2 10 trunk/bindings/python/Makefile.am
r1238 r1262 86 86 87 87 tinymail_h_files = \ 88 $(top_srcdir)/libtinymail/tny-error.h \ 88 89 $(top_srcdir)/libtinymail/tny-account.h \ 89 90 $(top_srcdir)/libtinymail/tny-account-store.h \ trunk/bindings/python/tinymail.override
r1111 r1262 40 40 41 41 static void 42 tny_get_folders_cb (TnyFolderStore *self, TnyList *list, gpointer user_data)42 tny_get_folders_cb (TnyFolderStore *self, TnyList *list, GError **err, gpointer user_data) 43 43 { 44 44 PyObject *callback, *args, *ret; … … 54 54 if (!ret) 55 55 PyErr_Print(); 56 57 pyg_error_check(err); 58 56 59 Py_XDECREF(ret); 57 60 Py_DECREF(args); … … 92 95 93 96 static void 94 tny_refresh_folder_cb (TnyFolder *self, gboolean cancelled, gpointer user_data)97 tny_refresh_folder_cb (TnyFolder *self, gboolean cancelled, GError **err, gpointer user_data) 95 98 { 96 99 PyObject *callback, *args, *ret; … … 106 109 if (!ret) 107 110 PyErr_Print(); 111 112 pyg_error_check(err); 113 108 114 Py_XDECREF(ret); 109 115 Py_DECREF(args); … … 138 144 static char *kwlist[] = { "refresh_func", "status_func", "user_data", NULL }; 139 145 PyObject *refresh_func, *status_func = Py_None, *user_data = Py_None; 140 141 146 PyObject *data; 142 147 trunk/libtinymail-camel/tny-camel-folder.c
r1240 r1262 34 34 #include <tny-camel-store-account.h> 35 35 #include <tny-list.h> 36 #include <tny-error.h> 36 37 37 38 #include <camel/camel-folder.h> … … 231 232 232 233 static void 233 tny_camel_folder_add_msg (TnyFolder *self, TnyMsg *msg )234 { 235 TNY_CAMEL_FOLDER_GET_CLASS (self)->add_msg_func (self, msg );234 tny_camel_folder_add_msg (TnyFolder *self, TnyMsg *msg, GError **err) 235 { 236 TNY_CAMEL_FOLDER_GET_CLASS (self)->add_msg_func (self, msg, err); 236 237 return; 237 238 } 238 239 239 240 static void 240 tny_camel_folder_add_msg_default (TnyFolder *self, TnyMsg *msg )241 tny_camel_folder_add_msg_default (TnyFolder *self, TnyMsg *msg, GError **err) 241 242 { 242 243 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 261 262 camel_folder_append_message (priv->folder, message, NULL, NULL, ex); 262 263 263 /* TODO: improve handling of ex */264 264 if (camel_exception_is_set (ex)) 265 g_warning ("Adding message failed: %s\n", 265 { 266 g_set_error (err, TNY_CAMEL_LITE_ERROR, 267 TNY_FOLDER_ADD_MSG_ERROR, 266 268 camel_exception_get_description (ex)); 267 268 /* TODO: emit a folder-msg-inserted signal */ 269 } else { 270 271 /* TODO: emit a folder-msg-inserted signal */ 272 273 } 269 274 270 275 camel_exception_free (ex); … … 277 282 278 283 static void 279 tny_camel_folder_remove_msg (TnyFolder *self, TnyHeader *header )280 { 281 TNY_CAMEL_FOLDER_GET_CLASS (self)->remove_msg_func (self, header );284 tny_camel_folder_remove_msg (TnyFolder *self, TnyHeader *header, GError **err) 285 { 286 TNY_CAMEL_FOLDER_GET_CLASS (self)->remove_msg_func (self, header, err); 282 287 return; 283 288 } 284 289 285 290 static void 286 tny_camel_folder_remove_msg_default (TnyFolder *self, TnyHeader *header )291 tny_camel_folder_remove_msg_default (TnyFolder *self, TnyHeader *header, GError **err) 287 292 { 288 293 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 302 307 } 303 308 304 tny_msg_remove_strategy_perform_remove (priv->remove_strat, self, header );309 tny_msg_remove_strategy_perform_remove (priv->remove_strat, self, header, err); 305 310 306 311 g_mutex_unlock (priv->folder_lock); … … 310 315 311 316 static void 312 tny_camel_folder_expunge (TnyFolder *self )313 { 314 TNY_CAMEL_FOLDER_GET_CLASS (self)->expunge_func (self );317 tny_camel_folder_expunge (TnyFolder *self, GError **err) 318 { 319 TNY_CAMEL_FOLDER_GET_CLASS (self)->expunge_func (self, err); 315 320 return; 316 321 } 317 322 318 323 static void 319 tny_camel_folder_expunge_default (TnyFolder *self )324 tny_camel_folder_expunge_default (TnyFolder *self, GError **err) 320 325 { 321 326 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 322 327 CamelException ex = CAMEL_EXCEPTION_INITIALISER; 323 324 /* This is only really needed in case message_info_load in325 camel-folder-summary.c doesn't try to recover the original message326 info instance327 328 if (priv->headers_managed > 0)329 {330 g_critical ("Request to expunge a folder denied: there are still "331 "header instances of this folder active. Destroy them "332 "first.");333 return;334 }335 */336 328 337 329 g_mutex_lock (priv->folder_lock); … … 346 338 camel_folder_sync (priv->folder, TRUE, &ex); 347 339 348 /* TODO: handle ex */ 340 if (camel_exception_is_set (&ex)) 341 { 342 g_set_error (err, TNY_CAMEL_LITE_ERROR, 343 TNY_FOLDER_EXPUNGE_ERROR, 344 camel_exception_get_description (&ex)); 345 } 349 346 350 347 g_mutex_unlock (priv->folder_lock); … … 556 553 gboolean cancelled; 557 554 guint depth; 555 GError *err; 558 556 } RefreshFolderInfo; 559 557 … … 563 561 tny_camel_folder_refresh_async_destroyer (gpointer thr_user_data) 564 562 { 565 566 TnyFolder *self = ((RefreshFolderInfo*)thr_user_data)->self;563 RefreshFolderInfo *info = thr_user_data; 564 TnyFolder *self = info->self; 567 565 568 566 /* gidle reference */ 569 567 g_object_unref (G_OBJECT (self)); 568 if (info->err) 569 g_error_free (info->err); 570 570 571 571 g_slice_free (RefreshFolderInfo, thr_user_data); … … 580 580 581 581 if (info->callback) 582 info->callback (info->self, info->cancelled, info->user_data);582 info->callback (info->self, info->cancelled, &info->err, info->user_data); 583 583 584 584 return FALSE; … … 600 600 /* gidle reference */ 601 601 g_object_unref (G_OBJECT (info->minfo->self)); 602 603 602 g_free (info->what); 603 604 604 g_slice_free (RefreshFolderInfo, info->minfo); 605 605 g_slice_free (ProgressInfo, data); … … 681 681 gchar *str; 682 682 CamelException *ex = camel_exception_new (); 683 GError *err = NULL; 683 684 684 685 camel_exception_init (ex); … … 701 702 g_free (str); 702 703 camel_folder_refresh_info (priv->folder, ex); 704 705 info->err = NULL; 706 707 if (camel_exception_is_set (ex)) 708 { 709 g_set_error (&err, TNY_CAMEL_LITE_ERROR, 710 TNY_FOLDER_REFRESH_ERROR, 711 camel_exception_get_description (ex)); 712 if (err != NULL) 713 info->err = g_error_copy ((const GError *) &err); 714 } 715 703 716 priv->cached_length = camel_folder_get_message_count (priv->folder); 704 717 … … 706 719 priv->unread_length = (guint)camel_folder_get_unread_message_count (priv->folder); 707 720 708 /* TODO: handle ex */709 721 camel_exception_free (ex); 710 722 info->cancelled = camel_operation_cancel_check (apriv->cancel); … … 763 775 GThread *thread; 764 776 777 info->err = NULL; 765 778 info->self = self; 766 779 info->callback = callback; … … 779 792 780 793 static void 781 tny_camel_folder_refresh (TnyFolder *self )782 { 783 TNY_CAMEL_FOLDER_GET_CLASS (self)->refresh_func (self );794 tny_camel_folder_refresh (TnyFolder *self, GError **err) 795 { 796 TNY_CAMEL_FOLDER_GET_CLASS (self)->refresh_func (self, err); 784 797 return; 785 798 } 786 799 787 800 static void 788 tny_camel_folder_refresh_default (TnyFolder *self )801 tny_camel_folder_refresh_default (TnyFolder *self, GError **err) 789 802 { 790 803 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 811 824 priv->unread_length = (guint)camel_folder_get_unread_message_count (priv->folder); 812 825 813 /* TODO: handle ex */ 826 if (camel_exception_is_set (ex)) 827 { 828 g_set_error (err, TNY_CAMEL_LITE_ERROR, 829 TNY_FOLDER_REFRESH_ERROR, 830 camel_exception_get_description (ex)); 831 } 832 814 833 camel_exception_free (ex); 815 834 … … 820 839 821 840 static void 822 tny_camel_folder_get_headers (TnyFolder *self, TnyList *headers, gboolean refresh )823 { 824 TNY_CAMEL_FOLDER_GET_CLASS (self)->get_headers_func (self, headers, refresh );825 return; 826 } 827 828 static void 829 tny_camel_folder_get_headers_default (TnyFolder *self, TnyList *headers, gboolean refresh )841 tny_camel_folder_get_headers (TnyFolder *self, TnyList *headers, gboolean refresh, GError **err) 842 { 843 TNY_CAMEL_FOLDER_GET_CLASS (self)->get_headers_func (self, headers, refresh, err); 844 return; 845 } 846 847 static void 848 tny_camel_folder_get_headers_default (TnyFolder *self, TnyList *headers, gboolean refresh, GError **err) 830 849 { 831 850 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 854 873 { 855 874 camel_folder_refresh_info (priv->folder, &ex); 875 876 if (camel_exception_is_set (&ex)) 877 { 878 g_set_error (err, TNY_CAMEL_LITE_ERROR, 879 TNY_FOLDER_REFRESH_ERROR, 880 camel_exception_get_description (&ex)); 881 } 882 856 883 priv->cached_length = camel_folder_get_message_count (priv->folder); 857 884 if (G_LIKELY (priv->folder) && CAMEL_IS_FOLDER (priv->folder) && G_LIKELY (priv->has_summary_cap)) … … 878 905 879 906 static TnyMsg* 880 tny_camel_folder_get_msg (TnyFolder *self, TnyHeader *header )881 { 882 return TNY_CAMEL_FOLDER_GET_CLASS (self)->get_msg_func (self, header );907 tny_camel_folder_get_msg (TnyFolder *self, TnyHeader *header, GError **err) 908 { 909 return TNY_CAMEL_FOLDER_GET_CLASS (self)->get_msg_func (self, header, err); 883 910 } 884 911 885 912 static TnyMsg* 886 tny_camel_folder_get_msg_default (TnyFolder *self, TnyHeader *header )913 tny_camel_folder_get_msg_default (TnyFolder *self, TnyHeader *header, GError **err) 887 914 { 888 915 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 907 934 camel_exception_init (ex); 908 935 camel_message = camel_folder_get_message (priv->folder, (const char *) id, ex); 936 937 if (camel_exception_is_set (ex)) 938 { 939 g_set_error (err, TNY_CAMEL_LITE_ERROR, 940 TNY_FOLDER_GET_MSG_ERROR, 941 camel_exception_get_description (ex)); 942 } 909 943 910 944 if (camel_message && camel_exception_get_id (ex) == CAMEL_EXCEPTION_NONE && CAMEL_IS_OBJECT (camel_message)) … … 987 1021 988 1022 static void 989 tny_camel_folder_transfer_msgs (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals )990 { 991 TNY_CAMEL_FOLDER_GET_CLASS (self)->transfer_msgs_func (self, headers, folder_dst, delete_originals );1023 tny_camel_folder_transfer_msgs (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals, GError **err) 1024 { 1025 TNY_CAMEL_FOLDER_GET_CLASS (self)->transfer_msgs_func (self, headers, folder_dst, delete_originals, err); 992 1026 } 993 1027 994 1028 /* TODO: provide an _async version of this. Requested by djcb. */ 995 1029 static void 996 tny_camel_folder_transfer_msgs_default (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals )1030 tny_camel_folder_transfer_msgs_default (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals, GError **err) 997 1031 { 998 1032 TnyFolder *folder_src = self; … … 1044 1078 if (camel_exception_is_set (ex)) 1045 1079 { 1046 g_warning ("Transfering messages failed: %s\n", 1047 camel_exception_get_description (ex)); 1080 g_set_error (err, TNY_CAMEL_LITE_ERROR, 1081 TNY_FOLDER_TRANSFER_MSGS_ERROR, 1082 camel_exception_get_description (ex)); 1048 1083 } else 1049 1084 { … … 1105 1140 1106 1141 static void 1107 tny_camel_folder_set_name (TnyFolder *self, const gchar *name )1108 { 1109 TNY_CAMEL_FOLDER_GET_CLASS (self)->set_name_func (self, name );1110 return; 1111 } 1112 1113 static void 1114 tny_camel_folder_set_name_default (TnyFolder *self, const gchar *name )1142 tny_camel_folder_set_name (TnyFolder *self, const gchar *name, GError **err) 1143 { 1144 TNY_CAMEL_FOLDER_GET_CLASS (self)->set_name_func (self, name, err); 1145 return; 1146 } 1147 1148 static void 1149 tny_camel_folder_set_name_default (TnyFolder *self, const gchar *name, GError **err) 1115 1150 { 1116 1151 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 1154 1189 if (camel_exception_is_set (&ex)) 1155 1190 { 1156 g_ warning (N_("Renaming folder %s to %s failed: %s\n"),1157 camel_folder_get_name (cfolder), name,1158 camel_exception_get_description (&ex));1191 g_set_error (err, TNY_CAMEL_LITE_ERROR, 1192 TNY_FOLDER_SET_NAME_ERROR, 1193 camel_exception_get_description (&ex)); 1159 1194 1160 1195 camel_exception_clear (&ex); … … 1355 1390 1356 1391 static void 1357 tny_camel_folder_remove_folder (TnyFolderStore *self, TnyFolder *folder )1358 { 1359 TNY_CAMEL_FOLDER_GET_CLASS (self)->remove_folder_func (self, folder );1392 tny_camel_folder_remove_folder (TnyFolderStore *self, TnyFolder *folder, GError **err) 1393 { 1394 TNY_CAMEL_FOLDER_GET_CLASS (self)->remove_folder_func (self, folder, err); 1360 1395 } 1361 1396 1362 1397 static void 1363 tny_camel_folder_remove_folder_default (TnyFolderStore *self, TnyFolder *folder )1398 tny_camel_folder_remove_folder_default (TnyFolderStore *self, TnyFolder *folder, GError **err) 1364 1399 { 1365 1400 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 1378 1413 parlen = strlen (folname); 1379 1414 1380 /* /INBOX/test 1381 /INBOX/test/test */1415 /* /INBOX/test * 1416 * /INBOX/test/test */ 1382 1417 1383 1418 if (!strncmp (folname, cfolname, parlen)) … … 1387 1422 { 1388 1423 camel_store_delete_folder (store, cfolname, &ex); 1424 1425 if (camel_exception_is_set (&ex)) 1426 { 1427 g_set_error (err, TNY_CAMEL_LITE_ERROR, 1428 TNY_FOLDER_STORE_REMOVE_FOLDER_ERROR, 1429 camel_exception_get_description (&ex)); 1430 camel_exception_clear (&ex); 1431 } 1432 1389 1433 g_free (cpriv->folder_name); cpriv->folder_name = NULL; 1390 1434 } 1391 1435 } 1392 1436 1393 /* TODO: error handling using 'ex' */1394 1437 1395 1438 return; … … 1416 1459 1417 1460 static TnyFolder* 1418 tny_camel_folder_create_folder (TnyFolderStore *self, const gchar *name )1419 { 1420 return TNY_CAMEL_FOLDER_GET_CLASS (self)->create_folder_func (self, name );1461 tny_camel_folder_create_folder (TnyFolderStore *self, const gchar *name, GError **err) 1462 { 1463 return TNY_CAMEL_FOLDER_GET_CLASS (self)->create_folder_func (self, name, err); 1421 1464 } 1422 1465 1423 1466 1424 1467 static TnyFolder* 1425 tny_camel_folder_create_folder_default (TnyFolderStore *self, const gchar *name) 1426 { 1427 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 1428 CamelStore *store = (CamelStore*) _tny_camel_account_get_service 1429 (TNY_CAMEL_ACCOUNT (priv->account)); 1430 gchar *folname; 1431 TnyFolder *folder; 1432 CamelFolderInfo *info; 1468 tny_camel_folder_create_folder_default (TnyFolderStore *self, const gchar *name, GError **err) 1469 { 1470 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 1433 1471 CamelException ex = CAMEL_EXCEPTION_INITIALISER; 1472 CamelStore *store; gchar *folname; 1473 TnyFolder *folder; CamelFolderInfo *info; 1434 1474 1435 1475 if (!priv->folder_name) 1476 { 1477 g_set_error (err, TNY_TINYMAIL_ERROR, 1478 TNY_FOLDER_STORE_CREATE_FOLDER_ERROR, 1479 _("Failed to create folder %s"), name); 1480 1436 1481 return NULL; 1482 } 1483 1484 store = (CamelStore*) _tny_camel_account_get_service (TNY_CAMEL_ACCOUNT (priv->account)); 1437 1485 1438 1486 folname = priv->folder_name; 1487 info = camel_store_create_folder (store, priv->folder_name, name, &ex); 1488 1489 if (camel_exception_is_set (&ex)) 1490 { 1491 g_set_error (err, TNY_CAMEL_LITE_ERROR, 1492 TNY_FOLDER_STORE_CREATE_FOLDER_ERROR, 1493 camel_exception_get_description (&ex)); 1494 camel_exception_clear (&ex); 1495 1496 if (store && CAMEL_IS_OBJECT (store)) 1497 { 1498 if (info && CAMEL_IS_STORE (store)) 1499 camel_store_free_folder_info (store, info); 1500 camel_object_unref (CAMEL_OBJECT (store)); 1501 } 1502 1503 return NULL; 1504 } 1505 1439 1506 folder = tny_camel_folder_new (); 1440 info = camel_store_create_folder (store, priv->folder_name, name, &ex);1441 1442 if (camel_exception_is_set (&ex))1443 {1444 g_warning (N_("Creating folder failed: %s\n"),1445 camel_exception_get_description (&ex));1446 g_object_unref (G_OBJECT (folder));1447 return NULL;1448 }1449 1507 1450 1508 tny_camel_folder_set_folder_info (self, TNY_CAMEL_FOLDER (folder), info); … … 1499 1557 1500 1558 static void 1501 tny_camel_folder_get_folders (TnyFolderStore *self, TnyList *list, TnyFolderStoreQuery *query )1502 { 1503 TNY_CAMEL_FOLDER_GET_CLASS (self)->get_folders_func (self, list, query );1559 tny_camel_folder_get_folders (TnyFolderStore *self, TnyList *list, TnyFolderStoreQuery *query, GError **err) 1560 { 1561 TNY_CAMEL_FOLDER_GET_CLASS (self)->get_folders_func (self, list, query, err); 1504 1562 } 1505 1563 1506 1564 static void 1507 tny_camel_folder_get_folders_default (TnyFolderStore *self, TnyList *list, TnyFolderStoreQuery *query )1565 tny_camel_folder_get_folders_default (TnyFolderStore *self, TnyList *list, TnyFolderStoreQuery *query, GError **err) 1508 1566 { 1509 1567 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); … … 1519 1577 CamelException ex = CAMEL_EXCEPTION_INITIALISER; 1520 1578 priv->iter = camel_store_get_folder_info (store, priv->folder_name, 0, &ex); 1579 1580 if (camel_exception_is_set (&ex)) 1581 { 1582 g_set_error (err, TNY_CAMEL_LITE_ERROR, 1583 TNY_FOLDER_STORE_GET_FOLDERS_ERROR, 1584 camel_exception_get_description (&ex)); 1585 camel_exception_clear (&ex); 1586 return; 1587 } 1588 1521 1589 priv->iter_parented = FALSE; 1522 1590 } … … 1547 1615 typedef struct 1548 1616 { 1617 GError *err; 1549 1618 TnyFolderStore *self; 1550 1619 TnyList *list; … … 1565 1634 g_object_unref (G_OBJECT (info->list)); 1566 1635 1567 g_free (info); 1636 if (info->err) 1637 g_error_free (info->err); 1638 1639 g_slice_free (GetFoldersInfo, info); 1568 1640 1569 1641 return; … … 1576 1648 1577 1649 if (info->callback) 1578 info->callback (info->self, info->list, info->user_data);1650 info->callback (info->self, info->list, &info->err, info->user_data); 1579 1651 1580 1652 return FALSE; … … 1585 1657 { 1586 1658 GetFoldersInfo *info = (GetFoldersInfo*) thr_user_data; 1659 GError *err; 1587 1660 1588 1661 tny_folder_store_get_folders (TNY_FOLDER_STORE (info->self), 1589 info->list, info->query); 1662 info->list, info->query, &err); 1663 1664 if (err != NULL) 1665 info->err = g_error_copy ((const GError *) &err); 1666 else 1667 info->err = NULL; 1590 1668 1591 1669 if (info->query) … … 1627 1705 tny_camel_folder_get_folders_async_default (TnyFolderStore *self, TnyList *list, TnyGetFoldersCallback callback, TnyFolderStoreQuery *query, gpointer user_data) 1628 1706 { 1629 GetFoldersInfo *info = g_ new0 (GetFoldersInfo, 1);1707 GetFoldersInfo *info = g_slice_new (GetFoldersInfo); 1630 1708 GThread *thread; 1631 1709 trunk/libtinymail-camel/tny-camel-folder.h
r1240 r1262 51 51 52 52 /* virtual methods */ 53 void (*add_msg_func) (TnyFolder *self, TnyMsg *msg );54 void (*remove_msg_func) (TnyFolder *self, TnyHeader *header );55 void (*expunge_func) (TnyFolder *self );53 void (*add_msg_func) (TnyFolder *self, TnyMsg *msg, GError **err); 54 void (*remove_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 55 void (*expunge_func) (TnyFolder *self, GError **err); 56 56 TnyMsgRemoveStrategy* (*get_msg_remove_strategy_func) (TnyFolder *self); 57 57 void (*set_msg_remove_strategy_func) (TnyFolder *self, TnyMsgRemoveStrategy *st); 58 TnyMsg* (*get_msg_func) (TnyFolder *self, TnyHeader *header );59 void (*get_headers_func) (TnyFolder *self, TnyList *headers, gboolean refresh );58 TnyMsg* (*get_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 59 void (*get_headers_func) (TnyFolder *self, TnyList *headers, gboolean refresh, GError **err); 60 60 const gchar* (*get_name_func) (TnyFolder *self); 61 61 const gchar* (*get_id_func) (TnyFolder *self); 62 62 TnyStoreAccount* (*get_account_func) (TnyFolder *self); 63 void (*set_name_func) (TnyFolder *self, const gchar *name );63 void (*set_name_func) (TnyFolder *self, const gchar *name, GError **err); 64 64 TnyFolderType (*get_folder_type_func) (TnyFolder *self); 65 65 guint (*get_all_count_func) (TnyFolder *self); … … 67 67 gboolean (*is_subscribed_func) (TnyFolder *self); 68 68 void (*refresh_async_func) (TnyFolder *self, TnyRefreshFolderCallback callback, TnyRefreshFolderStatusCallback status_callback, gpointer user_data); 69 void (*refresh_func) (TnyFolder *self );70 void (*transfer_msgs_func) (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals );69 void (*refresh_func) (TnyFolder *self, GError **err); 70 void (*transfer_msgs_func) (TnyFolder *self, TnyList *headers, TnyFolder *folder_dst, gboolean delete_originals, GError **err); 71 71 72 72 void (*get_folders_async_func) (TnyFolderStore *self, TnyList *list, TnyGetFoldersCallback callback, TnyFolderStoreQuery *query, gpointer user_data); 73 void (*get_folders_func) (TnyFolderStore *self, TnyList *list, TnyFolderStoreQuery *query );74 void (*remove_folder_func) (TnyFolderStore *self, TnyFolder *folder );75 TnyFolder* (*create_folder_func) (TnyFolderStore *self, const gchar *name );73 void (*get_folders_func) (TnyFolderStore *self, TnyList *list, TnyFolderStoreQuery *query, GError **err); 74 void (*remove_folder_func) (TnyFolderStore *self, TnyFolder *folder, GError **err); 75 TnyFolder* (*create_folder_func) (TnyFolderStore *self, const gchar *name, GError **err); 76 76 }; 77 77 trunk/libtinymail-camel/tny-camel-msg-remove-strategy.c
r1198 r1262 38 38 39 39 static void 40 tny_camel_msg_remove_strategy_perform_remove (TnyMsgRemoveStrategy *self, TnyFolder *folder, TnyHeader *header) 40 tny_camel_msg_remove_strategy_perform_remove (TnyMsgRemoveStrategy *self, TnyFolder *folder, TnyHeader *header, GError **err) 41 { 42 TNY_CAMEL_MSG_REMOVE_STRATEGY_GET_CLASS (self)->perform_remove_func (self, folder, header, err); 43 return; 44 } 45 46 static void 47 tny_camel_msg_remove_strategy_perform_remove_default (TnyMsgRemoveStrategy *self, TnyFolder *folder, TnyHeader *header, GError **err) 41 48 { 42 49 const gchar *id; … … 50 57 camel_folder_delete_message (cfolder, id); 51 58 camel_object_unref (CAMEL_OBJECT (cfolder)); 59 60 /* Nothing can go wrong in this implementation, but others might go wrong. 61 We just leave err untouched. */ 52 62 53 63 return; … … 101 111 object_class = (GObjectClass*) class; 102 112 113 class->perform_remove_func = tny_camel_msg_remove_strategy_perform_remove_default; 114 103 115 object_class->finalize = tny_camel_msg_remove_strategy_finalize; 104 116 trunk/libtinymail-camel/tny-camel-msg-remove-strategy.h
r1092 r1262 45 45 { 46 46 GObjectClass parent_class; 47 48 /* virtual methods */ 49 void (*perform_remove_func) (TnyMsgRemoveStrategy *self, TnyFolder *folder, TnyHeader *header, GError **err); 47 50 }; 48 51 trunk/libtinymail-camel/tny-camel-send-queue.c
r1233 r1262 51 51 sentbox = tny_send_queue_get_sentbox (self); 52 52 outbox = tny_send_queue_get_outbox (self); 53 tny_folder_get_headers (outbox, list, TRUE); 53 /* TODO handle and report errors here */ 54 tny_folder_get_headers (outbox, list, TRUE, NULL); 54 55 length = tny_list_get_length (list); 55 56 priv->total = length; … … 68 69 TnyIterator *hdriter; 69 70 TnyList *headers = tny_simple_list_new (); 70 tny_folder_get_headers (outbox, headers, TRUE); 71 /* TODO handle and report errors here */ 72 tny_folder_get_headers (outbox, headers, TRUE, NULL); 71 73 length = tny_list_get_length (headers); 72 74 priv->total = length; … … 89 91 90 92 tny_list_prepend (hassent, G_OBJECT (header)); 91 msg = tny_folder_get_msg (sentbox, header); 93 /* TODO handle and report errors here */ 94 msg = tny_folder_get_msg (sentbox, header, NULL); 92 95 g_object_unref (G_OBJECT (header)); 93 96 … … 96 99 g_mutex_lock (priv->todo_lock); 97 100 { 98 tny_folder_transfer_msgs (outbox, hassent, sentbox, TRUE); 101 /* TODO handle and report errors here */ 102 tny_folder_transfer_msgs (outbox, hassent, sentbox, TRUE, NULL); 99 103 priv->total--; 100 104 } … … 144 148 145 149 outbox = tny_send_queue_get_outbox (self); 146 tny_folder_get_headers (outbox, headers, TRUE); 150 151 /* TODO handle and report errors here */ 152 tny_folder_get_headers (outbox, headers, TRUE, NULL); 147 153 priv->total = tny_list_get_length (headers); 148 154 g_object_unref (G_OBJECT (headers)); 149 155 150 tny_folder_add_msg (outbox, msg); 156 /* TODO error checking and reporting here */ 157 tny_folder_add_msg (outbox, msg, NULL); 151 158 priv->total++; 152 159 trunk/libtinymail-camel/tny-camel-store-account.c
r1241 r1262 35 35 #include <tny-folder-store.h> 36 36 #include <tny-camel-folder.h> 37 #include <tny-error.h> 37 38 38 39 #include <camel/camel.h> … … 304 305 305 306 static void 306 tny_camel_store_account_remove_folder (TnyFolderStore *self, TnyFolder *folder )307 { 308 TNY_CAMEL_STORE_ACCOUNT_GET_CLASS (self)->remove_folder_func (self, folder );307 tny_camel_store_account_remove_folder (TnyFolderStore *self, TnyFolder *folder, GError **err) 308 { 309 TNY_CAMEL_STORE_ACCOUNT_GET_CLASS (self)->remove_folder_func (self, folder, err); 309 310 } 310 311 311 312 static void 312 tny_camel_store_account_remove_folder_default (TnyFolderStore *self, TnyFolder *folder )313 tny_camel_store_account_remove_folder_default (TnyFolderStore *self, TnyFolder *folder, GError **err) 313 314 { 314 315 TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (self); … … 323 324 apriv->url_string, &ex); 324 325 325 if (store) 326 { 327 if (cpriv->folder_name) 328 { 329 /* Unsubscribe : camel should do it by itself 330 but it does not do it */ 331 if (camel_store_supports_subscriptions (store) && 332 camel_store_folder_subscribed (store, cpriv->folder_name)) 333 camel_store_unsubscribe_folder (store, cpriv->folder_name, NULL); 334 335 camel_store_delete_folder (store, cpriv->folder_name, &ex); 336 if (camel_exception_is_set (&ex)) 337 g_critical ("Could not delete folder %s (%s)\n", 338 cpriv->folder_name, camel_exception_get_description (&ex)); 339 g_free (cpriv->folder_name); cpriv->folder_name = NULL; 340 } 341 342 camel_object_unref (CAMEL_OBJECT (store)); 343 } else 344 g_critical ("Store not available for %s (%s)\n", 345 apriv->url_string, camel_exception_get_description (&ex)); 346 347 /* TODO: error handling using 'ex' */ 326 if (camel_exception_is_set (&ex)) 327 { 328 g_set_error (err, TNY_CAMEL_LITE_ERROR, 329 TNY_FOLDER_STORE_REMOVE_FOLDER_ERROR, 330 camel_exception_get_description (&ex)); 331 camel_exception_clear (&ex); 332 333 if (store && CAMEL_IS_OBJECT (store)) 334 camel_object_unref (CAMEL_OBJECT (store)); 335 336 return; 337 } 338 339 g_assert (CAMEL_IS_STORE (store)); 340 g_assert (cpriv->folder_name != NULL); 341 342 /* Unsubscribe : camel should do it by itself but it does not do it */ 343 if (camel_store_supports_subscriptions (store) && 344 camel_store_folder_subscribed (store, cpriv->folder_name)) 345 camel_store_unsubscribe_folder (store, cpriv->folder_name, NULL); 346 347 camel_store_delete_folder (store, cpriv->folder_name, &ex); 348 349 if (camel_exception_is_set (&ex)) 350 { 351 g_set_error (err, TNY_CAMEL_LITE_ERROR, 352 TNY_FOLDER_STORE_REMOVE_FOLDER_ERROR, 353 camel_exception_get_description (&ex)); 354 camel_exception_clear (&ex); 355 } 356 357 g_free (cpriv->folder_name); cpriv->folder_name = NULL; 358 359 camel_object_unref (CAMEL_OBJECT (store)); 360 348 361 349 362 return; … … 351 364 352 365 static TnyFolder* 353 tny_camel_store_account_create_folder (TnyFolderStore *self, const gchar *name )354 { 355 return TNY_CAMEL_STORE_ACCOUNT_GET_CLASS (self)->create_folder_func (self, name );366 tny_camel_store_account_create_folder (TnyFolderStore *self, const gchar *name, GError **err) 367 { 368 return TNY_CAMEL_STORE_ACCOUNT_GET_CLASS (self)->create_folder_func (self, name, err); 356 369 } 357 370 358 371 359 372 static TnyFolder* 360 tny_camel_store_account_create_folder_default (TnyFolderStore *self, const gchar *name )373 tny_camel_store_account_create_folder_default (TnyFolderStore *self, const gchar *name, GError **err) 361 374 { 362 375 TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (self); 363 376 CamelException ex = CAMEL_EXCEPTION_INITIALISER; 364 TnyFolder *folder = tny_camel_folder_new (); 365 CamelFolderInfo *info; 366 CamelStore *store; 377 TnyFolder *folder; CamelFolderInfo *info; CamelStore *store; 367 378 368 379 store = camel_session_get_store ((CamelSession*) apriv->session, 369 380 apriv->url_string, &ex); 370 381 371 if (store) 372 { 373 info = camel_store_create_folder (store, "/", name, &ex); 374 if (info) 375 { 376 _tny_camel_folder_set_id (TNY_CAMEL_FOLDER (folder), info->full_name); 377 camel_store_free_folder_info (store, info); 378 } else 379 g_critical ("Failed to create folder %s (%s)\n", name, 382 if (camel_exception_is_set (&ex)) 383 { 384 g_set_error (err, TNY_CAMEL_LITE_ERROR, 385 TNY_FOLDER_STORE_CREATE_FOLDER_ERROR, 380 386 camel_exception_get_description (&ex)); 381 382 camel_object_unref (CAMEL_OBJECT (store)); 383 } else 384 g_critical ("Store not available for %s (%s)\n", 385 <
