Changeset 2097
- Timestamp:
- 06/07/07 16:52:09
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/camel-folder.c (modified) (1 diff)
- trunk/libtinymail-camel/camel-lite/camel/camel-store.c (modified) (3 diffs)
- trunk/libtinymail-camel/camel-lite/camel/camel-store.h (modified) (2 diffs)
- trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c (modified) (3 diffs)
- trunk/libtinymail-camel/tny-camel-folder.c (modified) (2 diffs)
- trunk/tests/c-demo/tny-demoui-summary-view.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r2095 r2097 14 14 * Fix for sergio, when removing folders the CamelFolderInfo iter was 15 15 still cached 16 16 * tny_folder_poke_status will now, for IMAP, do a STATUS command to 17 more accurately find out the UNSEEN and MESSAGES statuses 18 17 19 2007-06-06 Philip Van Hoof <pvanhoof@gnome.org> 18 20 trunk/libtinymail-camel/camel-lite/camel/camel-folder.c
r2088 r2097 1773 1773 CamelFolder *folder = (CamelFolder *)obj; 1774 1774 CamelFolderChangeInfo *changed = event_data; 1775 struct _CamelFolderChangeInfoPrivate *p = changed->priv;1776 1775 CamelSession *session = ((CamelService *)folder->parent_store)->session; 1777 1776 CamelFilterDriver *driver = NULL; trunk/libtinymail-camel/camel-lite/camel/camel-store.c
r2076 r2097 86 86 static int store_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args); 87 87 88 static GPtrArray* get_recent_messages (CamelStore *store, const char *folder_name, int *unseen, int *messages);88 static void get_folder_status_impl (CamelStore *store, const char *folder_name, int *unseen, int *messages, int *uidnext); 89 89 90 90 static void … … 113 113 camel_store_class->unsubscribe_folder = unsubscribe_folder; 114 114 camel_store_class->noop = noop; 115 camel_store_class->get_ recent_messages = get_recent_messages;115 camel_store_class->get_folder_status = get_folder_status_impl; 116 116 camel_store_class->delete_cache = delete_cache; 117 117 … … 195 195 } 196 196 197 GPtrArray* 198 camel_store_get_recent_messages (CamelStore *store, const char *folder_name, 199 int *unseen, int *messages) 200 { 201 GPtrArray *ret; 202 197 void 198 camel_store_get_folder_status (CamelStore *store, const char *folder_name, 199 int *unseen, int *messages, int *uidnext) 200 { 203 201 CAMEL_STORE_LOCK(store, folder_lock); 204 ret = CS_CLASS (store)->get_recent_messages (store, folder_name, unseen, messages);202 CS_CLASS (store)->get_folder_status (store, folder_name, unseen, messages, uidnext); 205 203 CAMEL_STORE_UNLOCK(store, folder_lock); 206 204 207 return ret;208 } 209 210 static GPtrArray*211 get_ recent_messages (CamelStore *store, const char *folder_name, int *unseen, int *messages)205 return; 206 } 207 208 static void 209 get_folder_status_impl (CamelStore *store, const char *folder_name, int *unseen, int *messages, int *uidnext) 212 210 { 213 211 *unseen = 0; 214 212 *messages = 0; 215 return NULL; 213 *uidnext = 0; 214 215 return; 216 216 } 217 217 trunk/libtinymail-camel/camel-lite/camel/camel-store.h
r2076 r2097 188 188 void (*noop) (CamelStore *store, 189 189 CamelException *ex); 190 GPtrArray* (*get_recent_messages)(CamelStore *store,190 void (*get_folder_status) (CamelStore *store, 191 191 const char *folder_name, 192 int *unseen, int *messages); 192 int *unseen, int *messages, 193 int *uidnext); 193 194 void (*delete_cache) (CamelStore *store); 194 195 … … 267 268 int *unseen, int *messages); 268 269 270 void camel_store_get_folder_status (CamelStore *store, 271 const char *folder_name, 272 int *unseen, int *messages, 273 int *uidnext); 274 269 275 void camel_store_delete_cache (CamelStore *store); 270 276 trunk/libtinymail-camel/camel-lite/camel/providers/imap/camel-imap-store.c
r2092 r2097 139 139 static void imap_set_server_level (CamelImapStore *store); 140 140 141 static GPtrArray* imap_get_recent_messages (CamelStore *store, const char *folder_name, int *unseen, int *messages);141 static void imap_get_folder_status (CamelStore *store, const char *folder_name, int *unseen, int *messages, int *uidnext); 142 142 143 143 void … … 244 244 camel_store_class->get_trash = imap_get_trash; 245 245 camel_store_class->get_junk = imap_get_junk; 246 camel_store_class->get_ recent_messages = imap_get_recent_messages;246 camel_store_class->get_folder_status = imap_get_folder_status; 247 247 248 248 camel_disco_store_class->can_work_offline = can_work_offline; … … 2277 2277 } 2278 2278 2279 static GPtrArray* 2280 imap_get_recent_messages (CamelStore *store, const char *folder_name, int *unseen, int *messages) 2281 { 2282 GPtrArray *retval = NULL; 2279 static void 2280 imap_get_folder_status (CamelStore *store, const char *folder_name, int *unseen, int *messages, int *uidnext) 2281 { 2283 2282 CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); 2284 2285 CAMEL_SERVICE_REC_LOCK(imap_store, connect_lock); 2286 retval = _camel_imap_store_get_recent_messages (imap_store, folder_name, unseen, messages, TRUE); 2283 struct imap_status_item *items, *item; 2284 CamelException ex = CAMEL_EXCEPTION_INITIALISER; 2285 2286 if (!camel_disco_store_check_online (CAMEL_DISCO_STORE (imap_store), &ex)) 2287 return; 2288 2289 CAMEL_SERVICE_REC_LOCK (imap_store, connect_lock); 2290 2291 /* 2292 * Example: C: A042 STATUS blurdybloop (UIDNEXT MESSAGES) 2293 * S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292) 2294 * S: A042 OK STATUS completed */ 2295 2296 item = items = get_folder_status (imap_store, folder_name, "MESSAGES UNSEEN UIDNEXT"); 2297 while (item != NULL) { 2298 if (!g_ascii_strcasecmp (item->name, "MESSAGES")) 2299 *messages = item->value; 2300 if (!g_ascii_strcasecmp (item->name, "UNSEEN")) 2301 *unseen = item->value; 2302 if (!g_ascii_strcasecmp (item->name, "UIDNEXT")) 2303 *uidnext = item->value; 2304 item = item->next; 2305 } 2306 imap_status_item_free (items); 2307 2287 2308 CAMEL_SERVICE_REC_UNLOCK (imap_store, connect_lock); 2288 2309 2289 return retval;2310 return; 2290 2311 } 2291 2312 trunk/libtinymail-camel/tny-camel-folder.c
r2096 r2097 3350 3350 TnyFolder *self = data; 3351 3351 TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 3352 guint newlen, newurlen;3352 int newlen, newurlen; 3353 3353 gboolean set=FALSE; 3354 3354 TnyFolderChange *change; 3355 CamelStore *store = priv->store; 3355 3356 3356 3357 if (priv->folder) 3357 3358 { 3358 3359 g_static_rec_mutex_lock (priv->folder_lock); 3360 3359 3361 set=TRUE; 3360 3362 newurlen = camel_folder_get_unread_message_count (priv->folder); 3361 3363 newlen = camel_folder_get_message_count (priv->folder); 3364 3362 3365 g_static_rec_mutex_unlock (priv->folder_lock); 3363 3366 } else if (priv->iter) { 3367 3364 3368 g_static_rec_mutex_lock (priv->folder_lock); 3365 set=TRUE; 3366 newurlen = priv->iter->unread; 3367 newlen = priv->iter->total; 3369 3370 if (store && priv->folder_name && camel_disco_store_status (CAMEL_DISCO_STORE (store)) == CAMEL_DISCO_STORE_ONLINE) 3371 { 3372 int uidnext; 3373 camel_store_get_folder_status (store, priv->folder_name, 3374 &newurlen, &newlen, &uidnext); 3375 set = TRUE; 3376 } else { 3377 set=TRUE; 3378 newurlen = priv->iter->unread; 3379 newlen = priv->iter->total; 3380 } 3381 3368 3382 g_static_rec_mutex_unlock (priv->folder_lock); 3369 3383 } … … 3372 3386 { 3373 3387 change = tny_folder_change_new (self); 3374 priv->cached_length = newlen;3388 priv->cached_length = (guint) newlen; 3375 3389 tny_folder_change_set_new_all_count (change, priv->cached_length); 3376 priv->unread_length = newurlen;3390 priv->unread_length = (guint) newurlen; 3377 3391 tny_folder_change_set_new_unread_count (change, priv->unread_length); 3378 3392 notify_folder_observers_about (self, change); trunk/tests/c-demo/tny-demoui-summary-view.c
r2076 r2097 93 93 TnyMsgView *msg_view; 94 94 guint accounts_reloaded_signal; 95 GtkWidget *status, *progress, *online_button ;95 GtkWidget *status, *progress, *online_button, *poke_button; 96 96 guint status_id; 97 97 gulong mailbox_select_sid; … … 277 277 g_object_unref (G_OBJECT (device)); 278 278 } 279 } 280 281 static void 282 recurse_poke (TnyFolderStore *f_store) 283 { 284 TnyList *folders = tny_simple_list_new (); 285 TnyIterator *f_iter; 286 287 tny_folder_store_get_folders (TNY_FOLDER_STORE (f_store), folders, NULL, NULL); 288 f_iter = tny_list_create_iterator (folders); 289 while (!tny_iterator_is_done (f_iter)) 290 { 291 TnyFolder *f_cur = TNY_FOLDER (tny_iterator_get_current (f_iter)); 292 293 tny_folder_poke_status (f_cur); 294 295 if (TNY_IS_FOLDER_STORE (f_cur)) 296 recurse_poke (TNY_FOLDER_STORE (f_cur)); 297 298 g_object_unref (f_cur); 299 tny_iterator_next (f_iter); 300 } 301 g_object_unref (f_iter); 302 g_object_unref (folders); 303 } 304 305 static void 306 poke_button_toggled (GtkToggleButton *togglebutton, gpointer user_data) 307 { 308 TnySummaryView *self = user_data; 309 TnyDemouiSummaryViewPriv *priv = TNY_DEMOUI_SUMMARY_VIEW_GET_PRIVATE (self); 310 TnyList *accounts = tny_simple_list_new (); 311 TnyIterator *a_iter; 312 313 tny_account_store_get_accounts (priv->account_store, accounts, 314 TNY_ACCOUNT_STORE_STORE_ACCOUNTS); 315 316 a_iter = tny_list_create_iterator (accounts); 317 318 while (!tny_iterator_is_done (a_iter)) 319 { 320 TnyAccount *a_cur = TNY_ACCOUNT (tny_iterator_get_current (a_iter)); 321 322 recurse_poke (TNY_FOLDER_STORE (a_cur)); 323 324 g_object_unref (a_cur); 325 tny_iterator_next (a_iter); 326 } 327 328 g_object_unref (a_iter); 329 g_object_unref (accounts); 279 330 } 280 331 … … 1355 1406 priv->last_mailbox_correct_select_set = FALSE; 1356 1407 priv->online_button = gtk_toggle_button_new_with_label (GO_ONLINE_TXT); 1408 priv->poke_button = gtk_button_new_with_label ("Poke status"); 1357 1409 priv->current_accounts = NULL; 1358 1410 1359 1411 priv->online_button_signal = g_signal_connect (G_OBJECT (priv->online_button), "toggled", 1360 1412 G_CALLBACK (online_button_toggled), self); 1413 1414 g_signal_connect (G_OBJECT (priv->poke_button), "clicked", 1415 G_CALLBACK (poke_button_toggled), self); 1361 1416 1362 1417 #if PLATFORM==1 … … 1386 1441 gtk_box_pack_start (GTK_BOX (priv->status), priv->progress, FALSE, FALSE, 0); 1387 1442 gtk_box_pack_start (GTK_BOX (priv->status), priv->online_button, FALSE, FALSE, 0); 1443 gtk_box_pack_start (GTK_BOX (priv->status), priv->poke_button, FALSE, FALSE, 0); 1388 1444 1389 1445 gtk_widget_show (priv->online_button); 1446 gtk_widget_show (priv->poke_button); 1390 1447 gtk_widget_show (priv->status); 1391 1448 gtk_widget_show (GTK_WIDGET (vbox));
