/* This file is part of Subsonic. Subsonic is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Subsonic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Subsonic. If not, see . Copyright 2014 (C) Scott Jackson */ package net.nullsum.audinaut.service.parser; import android.content.Context; import net.nullsum.audinaut.domain.MusicFolder; import net.nullsum.audinaut.domain.User; import net.nullsum.audinaut.domain.User.Setting; import net.nullsum.audinaut.service.MusicService; import net.nullsum.audinaut.service.MusicServiceFactory; import org.xmlpull.v1.XmlPullParser; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class UserParser extends AbstractParser { public UserParser(Context context, int instance) { super(context, instance); } public List parse(InputStream inputStream) throws Exception { init(inputStream); List result = new ArrayList<>(); List musicFolders = null; User user = null; int eventType; String tagName = null; do { eventType = nextParseEvent(); if (eventType == XmlPullParser.START_TAG) { tagName = getElementName(); if ("user".equals(tagName)) { user = new User(); for (String role : User.ROLES) { parseSetting(user, role); } result.add(user); } else if ("error".equals(tagName)) { handleError(); } } else if (eventType == XmlPullParser.TEXT) { if ("folder".equals(tagName)) { String id = getText(); if (musicFolders == null) { musicFolders = getMusicFolders(); } if (user != null) { if (user.getMusicFolderSettings() == null) { for (MusicFolder musicFolder : musicFolders) { user.addMusicFolder(musicFolder); } } for (Setting musicFolder : user.getMusicFolderSettings()) { if (musicFolder.getName().equals(id)) { musicFolder.setValue(true); break; } } } } } } while (eventType != XmlPullParser.END_DOCUMENT); validate(); return result; } private List getMusicFolders() throws Exception { MusicService musicService = MusicServiceFactory.getMusicService(context); return musicService.getMusicFolders(false, context, null); } private void parseSetting(User user, String name) { String value = get(name); if (value != null) { user.addSetting(name, "true".equals(value)); } } }