X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneDownloader.java;h=d8b924f208f14aba2bedee3ae8ad9903c128456b;hp=db26d806992cdfe1277b29f42c2443236cb0bd6a;hb=490ee2861e0b125667a14845f0f04fe56809c2e3;hpb=43a21f859e9fec31096c1540148bdd44a8e3702f diff --git a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java index db26d80..d8b924f 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java @@ -219,8 +219,10 @@ public class SoneDownloader extends AbstractService { * @param soneInputStream * The input stream to parse the Sone from * @return The parsed Sone + * @throws SoneException + * if a parse error occurs, or the protocol is invalid */ - public Sone parseSone(Sone originalSone, InputStream soneInputStream) { + public Sone parseSone(Sone originalSone, InputStream soneInputStream) throws SoneException { /* TODO - impose a size limit? */ Document document; @@ -330,14 +332,16 @@ public class SoneDownloader extends AbstractService { Integer profileBirthYear = Numbers.safeParseInteger(profileXml.getValue("birth-year", null)); Profile profile = new Profile().setFirstName(profileFirstName).setMiddleName(profileMiddleName).setLastName(profileLastName); profile.setBirthDay(profileBirthDay).setBirthMonth(profileBirthMonth).setBirthYear(profileBirthYear); + /* avatar is processed after images are loaded. */ + String avatarId = profileXml.getValue("avatar", null); /* parse profile fields. */ SimpleXML profileFieldsXml = profileXml.getNode("fields"); if (profileFieldsXml != null) { for (SimpleXML fieldXml : profileFieldsXml.getNodes("field")) { String fieldName = fieldXml.getValue("field-name", null); - String fieldValue = fieldXml.getValue("field-value", null); - if ((fieldName == null) || (fieldValue == null)) { + String fieldValue = fieldXml.getValue("field-value", ""); + if (fieldName == null) { logger.log(Level.WARNING, "Downloaded profile field for Sone %s with missing data! Name: %s, Value: %s", new Object[] { sone, fieldName, fieldValue }); return null; } @@ -493,6 +497,11 @@ public class SoneDownloader extends AbstractService { } } + /* process avatar. */ + if (avatarId != null) { + sone.setAvatar(core.getImage(avatarId, false)); + } + /* okay, apparently everything was parsed correctly. Now import. */ /* atomic setter operation on the Sone. */ synchronized (sone) {