blob: 113a3b87f63f24eb81717a86ef7f5bcee35fb174 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include "itemutils.h"
#include "controller.h"
#include "strprintf.h"
namespace newsboat {
bool enqueue_item_enclosure(RssItem& item, RssFeed& feed,
View& v, Cache& cache)
{
if (item.enclosure_url().empty()) {
v.get_statusline().show_error(_("Item has no enclosures."));
return false;
} else if (!utils::is_http_url(item.enclosure_url())) {
v.get_statusline().show_error(strprintf::fmt(
_("Item's enclosure has non-http link: '%s'"), item.enclosure_url()));
return false;
} else {
const EnqueueResult result = v.get_ctrl()->enqueue_url(item, feed);
cache.update_rssitem_unread_and_enqueued(item, feed.rssurl());
switch (result.status) {
case EnqueueStatus::QUEUED_SUCCESSFULLY:
v.get_statusline().show_message(
strprintf::fmt(_("Added %s to download queue."),
item.enclosure_url()));
return true;
case EnqueueStatus::URL_QUEUED_ALREADY:
v.get_statusline().show_message(
strprintf::fmt(_("%s is already queued."),
item.enclosure_url()));
return true; // Not a failure, just an idempotent action
case EnqueueStatus::OUTPUT_FILENAME_USED_ALREADY:
v.get_statusline().show_error(
strprintf::fmt(_("Generated filename (%s) is used already."),
result.extra_info));
return false;
case EnqueueStatus::QUEUE_FILE_OPEN_ERROR:
v.get_statusline().show_error(
strprintf::fmt(_("Failed to open queue file: %s."), result.extra_info));
return false;
}
// Not reachable, all switch cases return a result already,
// and compiler will warn if a switch case is missing.
return false;
}
}
} // namespace newsboat
|