aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/entities/Bookmark.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian.schneppe@pix-art.de>2019-10-26 17:48:13 +0200
committerChristian Schneppe <christian.schneppe@pix-art.de>2019-10-26 17:48:13 +0200
commit6df9c91b30c01beeb5d3f25d68f599e0dbe4c319 (patch)
treeee22edb2587cae2748db3b93878e392a619a3e91 /src/main/java/de/pixart/messenger/entities/Bookmark.java
parent5e41a659b7256c46667086cf690c428f7c764a4c (diff)
WIP Bookmarks 2 support
Diffstat (limited to 'src/main/java/de/pixart/messenger/entities/Bookmark.java')
-rw-r--r--src/main/java/de/pixart/messenger/entities/Bookmark.java77
1 files changed, 70 insertions, 7 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Bookmark.java b/src/main/java/de/pixart/messenger/entities/Bookmark.java
index f57d1aacb..c7f33af3e 100644
--- a/src/main/java/de/pixart/messenger/entities/Bookmark.java
+++ b/src/main/java/de/pixart/messenger/entities/Bookmark.java
@@ -1,14 +1,19 @@
package de.pixart.messenger.entities;
import android.content.Context;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
+import de.pixart.messenger.utils.Namespace;
import de.pixart.messenger.utils.StringUtils;
import de.pixart.messenger.utils.UIHelper;
import de.pixart.messenger.xml.Element;
@@ -33,20 +38,70 @@ public class Bookmark extends Element implements ListItem {
this.account = account;
}
+ public static Collection<Bookmark> parseFromStorage(Element storage, Account account) {
+ if (storage == null) {
+ return Collections.emptyList();
+ }
+ final HashMap<Jid, Bookmark> bookmarks = new HashMap<>();
+ for (final Element item : storage.getChildren()) {
+ if (item.getName().equals("conference")) {
+ final Bookmark bookmark = Bookmark.parse(item, account);
+ if (bookmark != null) {
+ final Bookmark old = bookmarks.put(bookmark.getJid(), bookmark);
+ if (old != null && old.getBookmarkName() != null && bookmark.getBookmarkName() == null) {
+ bookmark.setBookmarkName(old.getBookmarkName());
+ }
+ }
+ }
+ }
+ return bookmarks.values();
+ }
+
+ public static Collection<Bookmark> parseFromPubsub(Element pubsub, Account account) {
+ if (pubsub == null) {
+ return Collections.emptyList();
+ }
+ final Element items = pubsub.findChild("items");
+ if (items != null && Namespace.BOOKMARK.equals(items.getAttribute("node"))) {
+ final List<Bookmark> bookmarks = new ArrayList<>();
+ for (Element item : items.getChildren()) {
+ if (item.getName().equals("item")) {
+ final Bookmark bookmark = Bookmark.parseFromItem(item, account);
+ if (bookmark != null) {
+ bookmarks.add(bookmark);
+ }
+ }
+ }
+ return bookmarks;
+ }
+ return Collections.emptyList();
+ }
+
public static Bookmark parse(Element element, Account account) {
Bookmark bookmark = new Bookmark(account);
bookmark.setAttributes(element.getAttributes());
bookmark.setChildren(element.getChildren());
bookmark.jid = InvalidJid.getNullForInvalid(bookmark.getAttributeAsJid("jid"));
+ if (bookmark.jid == null) {
+ return null;
+ }
return bookmark;
}
- public static boolean printableValue(@Nullable String value, boolean permitNone) {
- return value != null && !value.trim().isEmpty() && (permitNone || !"None".equals(value));
- }
-
- public static boolean printableValue(@Nullable String value) {
- return printableValue(value, true);
+ public static Bookmark parseFromItem(Element item, Account account) {
+ final Element conference = item.findChild("conference", Namespace.BOOKMARK);
+ if (conference == null) {
+ return null;
+ }
+ final Bookmark bookmark = new Bookmark(account);
+ bookmark.jid = InvalidJid.getNullForInvalid(item.getAttributeAsJid("id"));
+ if (bookmark.jid == null) {
+ return null;
+ }
+ bookmark.setBookmarkName(conference.getAttribute("name"));
+ bookmark.setAutojoin(conference.getAttributeAsBoolean("autojoin"));
+ bookmark.setNick(conference.findChildContent("nick"));
+ return bookmark;
}
public void setAutojoin(boolean autojoin) {
@@ -82,6 +137,14 @@ public class Bookmark extends Element implements ListItem {
return 0;
}
+ public static boolean printableValue(@Nullable String value, boolean permitNone) {
+ return value != null && !value.trim().isEmpty() && (permitNone || !"None".equals(value));
+ }
+
+ public static boolean printableValue(@Nullable String value) {
+ return printableValue(value, true);
+ }
+
@Override
public Jid getJid() {
return this.jid;
@@ -191,4 +254,4 @@ public class Bookmark extends Element implements ListItem {
public int getAvatarBackgroundColor() {
return UIHelper.getColorForName(jid != null ? jid.asBareJid().toString() : getDisplayName());
}
-}
+} \ No newline at end of file