Mercurial > prosody-modules
comparison mod_pubsub_feeds/mod_pubsub_feeds.lua @ 2382:f159ad7ac18a
mod_pubsub_feeds: Check if node exists earlier and attempt to create it if not
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 19 Nov 2016 19:37:21 +0100 |
| parents | a4614a329bdd |
| children | 18323c6aa133 |
comparison
equal
deleted
inserted
replaced
| 2381:a4614a329bdd | 2382:f159ad7ac18a |
|---|---|
| 81 local feed = parse_feed(item.data); | 81 local feed = parse_feed(item.data); |
| 82 local entries = {}; | 82 local entries = {}; |
| 83 for entry in feed:childtags("entry") do | 83 for entry in feed:childtags("entry") do |
| 84 table.insert(entries, entry); | 84 table.insert(entries, entry); |
| 85 end | 85 end |
| 86 local ok = pubsub.service:get_items(node, true); | |
| 87 if not ok then | |
| 88 local ok, err = pubsub.service:create(node, true); | |
| 89 if not ok then | |
| 90 module:log("error", "Could not create node %s: %s", node, err); | |
| 91 return; | |
| 92 end | |
| 93 end | |
| 86 for i = #entries, 1, -1 do -- Feeds are usually in reverse order | 94 for i = #entries, 1, -1 do -- Feeds are usually in reverse order |
| 87 local entry = entries[i]; | 95 local entry = entries[i]; |
| 88 entry.attr.xmlns = xmlns_atom; | 96 entry.attr.xmlns = xmlns_atom; |
| 89 | 97 |
| 90 local e_published = entry:get_child_text("published"); | 98 local e_published = entry:get_child_text("published"); |
| 108 -- TODO Put data from /feed into item/source | 116 -- TODO Put data from /feed into item/source |
| 109 | 117 |
| 110 --module:log("debug", "publishing to %s, id %s", node, id); | 118 --module:log("debug", "publishing to %s, id %s", node, id); |
| 111 local ok, err = pubsub.service:publish(node, true, id, xitem); | 119 local ok, err = pubsub.service:publish(node, true, id, xitem); |
| 112 if not ok then | 120 if not ok then |
| 113 if err == "item-not-found" then -- try again | 121 module:log("error", "Publishing to node %s failed: %s", node, err); |
| 114 --module:log("debug", "got item-not-found, creating %s and trying again", node); | |
| 115 local ok, err = pubsub.service:create(node, true); | |
| 116 if not ok then | |
| 117 module:log("error", "could not create node %s: %s", node, err); | |
| 118 return; | |
| 119 end | |
| 120 local ok, err = pubsub.service:publish(node, true, id, xitem); | |
| 121 if not ok then | |
| 122 module:log("error", "could not create or publish node %s: %s", node, err); | |
| 123 return | |
| 124 end | |
| 125 else | |
| 126 module:log("error", "publishing %s failed: %s", node, err); | |
| 127 end | |
| 128 end | 122 end |
| 129 end | 123 end |
| 130 end | 124 end |
| 131 | 125 |
| 132 if item.lease_expires and item.lease_expires > time() then | 126 if item.lease_expires and item.lease_expires > time() then |
