Fixed typo in auth post password message. Make sure to keep site_destination set in login form, so that the user is redirected to previous location. Use default http client in the feel aggregator component, instead of forcing libcurl usage.
154 lines
4.3 KiB
Plaintext
154 lines
4.3 KiB
Plaintext
note
|
|
description: "API for Feed aggregator module."
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
class
|
|
FEED_AGGREGATOR_API
|
|
|
|
inherit
|
|
CMS_MODULE_API
|
|
|
|
create
|
|
make
|
|
|
|
feature -- Access
|
|
|
|
aggregations: HASH_TABLE [FEED_AGGREGATION, STRING]
|
|
-- List of feed aggregations.
|
|
local
|
|
agg: FEED_AGGREGATION
|
|
l_feed_id: READABLE_STRING_32
|
|
l_title: detachable READABLE_STRING_GENERAL
|
|
l_locations: detachable STRING_TABLE [READABLE_STRING_8]
|
|
utf: UTF_CONVERTER
|
|
l_table: like internal_aggregations
|
|
do
|
|
l_table := internal_aggregations
|
|
if l_table /= Void then
|
|
Result := l_table
|
|
else
|
|
create Result.make (0)
|
|
internal_aggregations := Result
|
|
if attached cms_api.module_configuration_by_name ({FEED_AGGREGATOR_MODULE}.name, "feeds") as cfg then
|
|
if attached cfg.text_list_item ("ids") as l_ids then
|
|
across
|
|
l_ids as ic
|
|
loop
|
|
l_feed_id := ic.item
|
|
create l_locations.make (1)
|
|
|
|
if attached cfg.text_list_item ({STRING_32} "feeds." + l_feed_id + ".locations") as l_location_list then
|
|
across
|
|
l_location_list as loc_ic
|
|
loop
|
|
l_locations.force (utf.utf_32_string_to_utf_8_string_8 (loc_ic.item), loc_ic.item)
|
|
end
|
|
end
|
|
if attached cfg.text_table_item ({STRING_32} "feeds." + l_feed_id + ".locations") as l_location_table then
|
|
across
|
|
l_location_table as loc_tb_ic
|
|
loop
|
|
l_locations.force (utf.utf_32_string_to_utf_8_string_8 (loc_tb_ic.item), loc_tb_ic.key)
|
|
end
|
|
end
|
|
if
|
|
attached cfg.text_item ({STRING_32} "feeds." + l_feed_id + ".location") as l_location
|
|
then
|
|
l_locations.force (utf.utf_32_string_to_utf_8_string_8 (l_location), l_location)
|
|
end
|
|
if l_locations /= Void and then not l_locations.is_empty then
|
|
l_title := cfg.text_item ({STRING_32} "feeds." + l_feed_id + ".title")
|
|
if l_title = Void then
|
|
l_title := l_feed_id
|
|
end
|
|
create agg.make (l_title)
|
|
if attached cfg.text_item ({STRING_32} "feeds." + l_feed_id + ".expiration") as l_expiration then
|
|
if l_expiration.is_integer then
|
|
agg.set_expiration (l_expiration.to_integer)
|
|
end
|
|
end
|
|
if attached cfg.text_item ({STRING_32} "feeds." + l_feed_id + ".size") as l_size then
|
|
if l_size.is_integer then
|
|
agg.set_size (l_size.to_integer)
|
|
end
|
|
end
|
|
if attached cfg.text_item ({STRING_32} "feeds." + l_feed_id + ".option_description") as l_description_opt then
|
|
agg.set_description_enabled (not l_description_opt.is_case_insensitive_equal_general ("disabled"))
|
|
end
|
|
across
|
|
l_locations as loc_ic
|
|
loop
|
|
agg.locations.force (utf.utf_32_string_to_utf_8_string_8 (loc_ic.item))
|
|
end
|
|
Result.force (agg, l_feed_id)
|
|
if attached cfg.text_list_item ({STRING_32} "feeds." + l_feed_id + ".categories") as l_cats then
|
|
across
|
|
l_cats as cats_ic
|
|
loop
|
|
agg.include_category (cats_ic.item)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
aggregation (a_name: READABLE_STRING_GENERAL): detachable FEED_AGGREGATION
|
|
do
|
|
if attached a_name.is_valid_as_string_8 then
|
|
Result := aggregations.item (a_name.as_string_8)
|
|
end
|
|
end
|
|
|
|
feature {NONE} -- Access: implementation
|
|
|
|
internal_aggregations: detachable like aggregations
|
|
-- Cache value for `aggregations'.
|
|
|
|
feature -- Operation
|
|
|
|
feed (a_location: READABLE_STRING_8): detachable FEED
|
|
local
|
|
fac: FEED_DEFAULT_PARSERS
|
|
ctx: detachable HTTP_CLIENT_REQUEST_CONTEXT
|
|
do
|
|
create fac
|
|
if attached new_http_client_session (a_location).get ("", ctx) as res then
|
|
if attached res.body as l_content then
|
|
Result := fac.feed_from_string (l_content)
|
|
end
|
|
end
|
|
end
|
|
|
|
aggregation_feed (agg: FEED_AGGREGATION): detachable FEED
|
|
-- Feed from aggregation `agg'.
|
|
do
|
|
across
|
|
agg.locations as ic
|
|
loop
|
|
if attached feed (ic.item) as f then
|
|
if Result /= Void then
|
|
if f /= Void then
|
|
Result := Result + f
|
|
end
|
|
else
|
|
Result := f
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
new_http_client_session (a_url: READABLE_STRING_8): HTTP_CLIENT_SESSION
|
|
local
|
|
cl: DEFAULT_HTTP_CLIENT
|
|
do
|
|
create cl
|
|
Result := cl.new_session (a_url)
|
|
Result.set_is_insecure (True)
|
|
end
|
|
|
|
end
|