Added category support for feed aggregation.

This commit is contained in:
2016-11-30 15:40:12 +01:00
parent 31d4c8dc5b
commit 5e98d82934

View File

@@ -40,7 +40,11 @@ feature -- Access
included_categories: detachable LIST [READABLE_STRING_32] included_categories: detachable LIST [READABLE_STRING_32]
-- Optional categories to filter. -- Optional categories to filter.
-- If Void, include any. -- If Void, include any, or consider the `included_categories_per_feed'.
included_categories_per_feed: detachable STRING_TABLE [detachable LIST [READABLE_STRING_32]]
-- Optional categories to filter per feed location..
-- If Void, include any or consider the `included_categories'.
description_enabled: BOOLEAN description_enabled: BOOLEAN
-- Display description? -- Display description?
@@ -54,6 +58,14 @@ feature -- Status report
Result := attached included_categories as cats and then not cats.is_empty Result := attached included_categories as cats and then not cats.is_empty
end end
has_category_filter_for_location (a_location: READABLE_STRING_GENERAL): BOOLEAN
-- Is there any category filtering for `a_location'?
do
Result := attached included_categories_per_feed as cats_per_location and then
attached cats_per_location.item (a_location) as cats and then
not cats.is_empty
end
feature -- Element change feature -- Element change
set_description (a_desc: detachable READABLE_STRING_GENERAL) set_description (a_desc: detachable READABLE_STRING_GENERAL)
@@ -86,6 +98,7 @@ feature -- Element change
reset_categories reset_categories
do do
included_categories := Void included_categories := Void
included_categories_per_feed := Void
end end
include_category (a_cat: READABLE_STRING_GENERAL) include_category (a_cat: READABLE_STRING_GENERAL)
@@ -105,6 +118,29 @@ feature -- Element change
end end
end end
include_category_per_feed (a_cat: READABLE_STRING_GENERAL; a_feed_location: READABLE_STRING_8)
local
tb: like included_categories_per_feed
lst: like included_categories
s32: STRING_32
do
tb := included_categories_per_feed
if tb = Void then
create tb.make_caseless (1)
included_categories_per_feed := tb
end
lst := tb.item (a_feed_location)
if lst = Void then
create {ARRAYED_LIST [READABLE_STRING_32]} lst.make (1)
lst.compare_objects
tb.force (lst, a_feed_location)
end
s32 := a_cat.to_string_32
if not lst.has (s32) then
lst.force (s32)
end
end
feature -- Status report feature -- Status report
is_included (e: FEED_ITEM): BOOLEAN is_included (e: FEED_ITEM): BOOLEAN
@@ -125,4 +161,24 @@ feature -- Status report
end end
end end
is_included_for_location (e: FEED_ITEM; a_location: READABLE_STRING_GENERAL): BOOLEAN
-- Is `e' included in feed related to `a_location'?
-- note that if `e' has no category, it is included by default,
-- even if `included_categories_per_feed' is defined for `a_location'.
do
Result := True
if attached e.categories as e_cats then
if
attached included_categories_per_feed as tb and then
attached tb.item (a_location) as lst
then
Result := across lst as ic some
across e_cats as e_ic some
e_ic.item.same_string (ic.item)
end
end
end
end
end
end end