void item_read_state_changed (itemPtr item, gboolean newState) { nodePtr node; debug_start_measurement (DEBUG_GUI); /* 1. set values in memory */ item->readStatus = newState; item->updateStatus = FALSE; /* 2. propagate to vfolders */ vfolder_foreach_data (vfolder_merge_item, item); vfolder_foreach (node_update_counters); /* 3. apply to DB */ db_item_state_update (item); /* 4. update item list GUI state */ itemlist_update_item (item); /* 5. updated feed list unread counters */ node = node_from_id (item->nodeId); node_update_counters (node); /* 6. update notification statistics */ feedlist_reset_new_item_count (); /* 7. duplicate state propagation */ if (item->validGuid) { GSList *duplicates, *iter; duplicates = iter = db_item_get_duplicates (item->sourceId); while (iter) { itemPtr duplicate = item_load (GPOINTER_TO_UINT (iter->data)); /* The check on node_from_id() is an evil workaround to handle "lost" items in the DB that have no associated node in the feed list. This should be fixed by having the feed list in the DB too, so we can clean up correctly after crashes. */ if (duplicate && duplicate->id != item->id && node_from_id (duplicate->nodeId)) { item_set_read_state (duplicate, newState); } if (duplicate) item_unload (duplicate); iter = g_slist_next (iter); } g_slist_free (duplicates); } debug_end_measurement (DEBUG_GUI, "set read status"); }
void item_flag_state_changed (itemPtr item, gboolean newState) { /* 1. set value in memory */ item->flagStatus = newState; /* 2. save state to DB */ db_item_state_update (item); /* 3. update vfolder counters */ vfolder_foreach (node_update_counters); /* 4. update item list GUI state */ itemlist_update_item (item); /* no duplicate state propagation to avoid copies in the "Important" search folder */ }
void item_flag_state_changed (itemPtr item, gboolean newState) { /* 1. set value in memory */ item->flagStatus = newState; /* 2. propagate to vfolders */ vfolder_foreach_data (vfolder_merge_item, item); vfolder_foreach (node_update_counters); /* 3. save state to DB */ db_item_state_update (item); /* 4. update item list GUI state */ itemlist_update_item (item); /* 5. update notification statistics */ feedlist_reset_new_item_count (); /* no duplicate state propagation to avoid copies in the "Important" search folder */ }