예제 #1
0
파일: itemlist.c 프로젝트: skagedal/liferea
// FIXME: is this an item set method?
static gboolean
itemlist_filter_check_item (itemPtr item)
{
	/* use search folder rule list in case of a search folder */
	if (itemlist->priv->currentNode && IS_VFOLDER (itemlist->priv->currentNode)) {
		vfolderPtr vfolder = (vfolderPtr)itemlist->priv->currentNode->data;
		return itemset_check_item (vfolder->itemset, item);
	}

	/* apply the item list filter if available */
	if (itemlist->priv->filter)
		return itemset_check_item (itemlist->priv->filter, item);
	
	/* otherwise keep the item */
	return TRUE;
}
예제 #2
0
파일: vfolder.c 프로젝트: dmitryvk/liferea
void
vfolder_merge_item (vfolderPtr vfolder, itemPtr item)
{
	gboolean found = itemset_has_item_id (vfolder->itemset, item->id);

	if (itemset_check_item (vfolder->itemset, item)) {
		if (!found)
			vfolder_add_item (vfolder, item);
	} else {
		if (found)
			vfolder_remove_item (vfolder, item);
	}
}
예제 #3
0
static gboolean
vfolder_loader_fetch_cb (gpointer user_data, GSList **resultItems)
{
	vfolderPtr	vfolder = (vfolderPtr)user_data;
	itemSetPtr	items = g_new0 (struct itemSet, 1);
	GList		*iter;
	gboolean	result;

	/* 1. Fetch a batch of items */
	result = db_itemset_get (items, vfolder->loadOffset, VFOLDER_LOADER_BATCH_SIZE);
	vfolder->loadOffset += VFOLDER_LOADER_BATCH_SIZE;

	if (result) {
		/* 2. Match all items against search folder */
		iter = items->ids;
		while (iter) {
			gulong id = GPOINTER_TO_UINT (iter->data);

			itemPtr	item = db_item_load (id);
			if (itemset_check_item (vfolder->itemset, item))
				*resultItems = g_slist_append (*resultItems, item);
			else
				item_unload (item);

			iter = g_list_next (iter);
		}
	} else {
		debug1 (DEBUG_CACHE, "search folder '%s' reload complete", vfolder->node->title);
		vfolder->reloading = FALSE;
	}

	itemset_free (items);

	/* 3. Save items to DB and update UI (except for search results) */
	if (vfolder->node) {
		db_search_folder_add_items (vfolder->node->id, *resultItems);
		node_update_counters (vfolder->node);
		ui_node_update (vfolder->node->id);
	}

	return result;	/* FALSE on last fetch */
}