diff --git a/src/mod_private.erl b/src/mod_private.erl index 53393832e..5fb5e9c15 100644 --- a/src/mod_private.erl +++ b/src/mod_private.erl @@ -230,7 +230,7 @@ set_data(JID, Data, PublishPepStorageBookmarks, PublishPepXmppBookmarks) -> false -> ok end, case PublishPepXmppBookmarks of - true -> publish_pep_xmpp_bookmarks(JID, Data); + true -> publish_pep_native_bookmarks(JID, Data); false -> ok end; {error, _} = Err -> @@ -299,21 +299,31 @@ publish_pep_storage_bookmarks(JID, Data) -> case lists:keyfind(?NS_STORAGE_BOOKMARKS, 1, Data) of false -> ok; {_, El} -> - PubOpts = [{persist_items, true}, - {access_model, whitelist}], - case mod_pubsub:publish_item( - LBJID, LServer, ?NS_STORAGE_BOOKMARKS, JID, - <<"current">>, [El], PubOpts, all) of - {result, _} -> ok; - {error, _} = Err -> Err + case mod_pubsub:get_items(LBJID, ?NS_STORAGE_BOOKMARKS) of + {error, #stanza_error{reason = 'item-not-found'}} -> + PubOpts = [{persist_items, true}, + {access_model, whitelist}], + case mod_pubsub:publish_item( + LBJID, LServer, ?NS_STORAGE_BOOKMARKS, JID, + <<"current">>, [El], PubOpts, all) of + {result, _} -> ok; + {error, _} = Err -> Err + end; + _ -> + case mod_pubsub:publish_item( + LBJID, LServer, ?NS_STORAGE_BOOKMARKS, JID, + <<"current">>, [El], [], all) of + {result, _} -> ok; + {error, _} = Err -> Err + end end end; false -> ok end. --spec publish_pep_xmpp_bookmarks(jid(), [{binary(), xmlel()}]) -> ok | {error, stanza_error()}. -publish_pep_xmpp_bookmarks(JID, Data) -> +-spec publish_pep_native_bookmarks(jid(), [{binary(), xmlel()}]) -> ok | {error, stanza_error()}. +publish_pep_native_bookmarks(JID, Data) -> {_, LServer, _} = LBJID = jid:remove_resource(jid:tolower(JID)), case gen_mod:is_loaded(LServer, mod_pubsub) of true -> @@ -323,12 +333,7 @@ publish_pep_xmpp_bookmarks(JID, Data) -> #bookmark_storage{conference = C} -> C; _ -> [] end, - PubOpts = [{persist_items, true}, - {access_model, whitelist}, - {max_items, max}, - {notify_retract,true}, - {notify_delete,true}, - {send_last_published_item, never}], + PubOpts = [{persist_items, true}, {access_model, whitelist}, {max_items, max}, {notify_retract,true}, {notify_delete,true}, {send_last_published_item, never}], case mod_pubsub:get_items(LBJID, ?NS_PEP_BOOKMARKS) of PepBookmarks when is_list(PepBookmarks) -> put(mod_private_pep_update, true), @@ -344,12 +349,12 @@ publish_pep_xmpp_bookmarks(JID, Data) -> {Map4, err_ret(Ret2, mod_pubsub:publish_item( LBJID, LServer, ?NS_PEP_BOOKMARKS, JID, - jid:encode(BookmarkJID), [xmpp:encode(PB)], PubOpts, all))}; + jid:encode(BookmarkJID), [xmpp:encode(PB)], [], all))}; _ -> {Map2, err_ret(Ret2, mod_pubsub:publish_item( LBJID, LServer, ?NS_PEP_BOOKMARKS, JID, - jid:encode(BookmarkJID), [xmpp:encode(PB)], PubOpts, all))} + jid:encode(BookmarkJID), [xmpp:encode(PB)], [], all))} end end, {PepBookmarksMap, ok}, Bookmarks), Ret4 = @@ -471,7 +476,6 @@ storage_bookmark_to_xmpp_bookmark(#bookmark_conference{name = Name, autojoin = A -spec pubsub_item_to_map(#pubsub_item{}, map()) -> map(). pubsub_item_to_map(#pubsub_item{itemid = {Id, _}, payload = [#xmlel{} = B | _]}, Map) -> - ?INFO_MSG("DECODING ~p", [B]), case xmpp:decode(B) of #pep_bookmarks_conference{} = B2 -> try jid:decode(Id) of @@ -523,7 +527,7 @@ bookmarks_to_pep(User, Server) -> Data = [{?NS_STORAGE_BOOKMARKS, El}], case publish_pep_storage_bookmarks(jid:make(User, Server), Data) of ok -> - case publish_pep_xmpp_bookmarks(jid:make(User, Server), Data) of + case publish_pep_native_bookmarks(jid:make(User, Server), Data) of ok -> {ok, <<"Bookmarks exported to PEP node">>}; {error, Err} ->