/******************************************************************************* * Copyright (c) 2005, 2006 Erkki Lindpere and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Erkki Lindpere - initial API and implementation *******************************************************************************/ package org.eclipse.ecf.internal.provider.vbulletin; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.ecf.bulletinboard.BBException; import org.eclipse.ecf.bulletinboard.IThreadMessage; import org.eclipse.ecf.internal.bulletinboard.commons.webapp.PostRequest; import org.eclipse.ecf.internal.bulletinboard.commons.webapp.WebRequest; import org.eclipse.ecf.internal.provider.vbulletin.identity.ThreadID; /** * TODO This threadbrowser assumes the user account settings to have been set to * the reverse post sorting order. This option should be detected instead. * * @author Erkki * */ public class ThreadBrowser2 { Thread thread; private VBulletin bb; public ThreadBrowser2(VBulletin bb, Thread thread) { this.bb = bb; this.thread = thread; } private static final int STARTPAGE = 1; private static final int NONE = -1; class SkippedStatus { public boolean messagesSkipped = false; }; public List<IThreadMessage> fetchNewMessages() throws BBException { List<IThreadMessage> messages = new ArrayList<IThreadMessage>(); try { int nextPage = STARTPAGE; SkippedStatus skipped = new SkippedStatus(); while (nextPage > NONE) { WebRequest req = createRequest(nextPage); req.execute(); String resp = req.getResponseBodyAsString(); req.releaseConnection(); messages.addAll(0, bb.getParser().parseMessages2(resp, thread.lastReadMessageId, true, skipped)); if (skipped.messagesSkipped) { nextPage = NONE; } else { nextPage = bb.getParser().parseNextPage(resp); } } } catch (IOException e) { e.printStackTrace(); } return messages; } public WebRequest createRequest(int page) { WebRequest req = new PostRequest(bb.getHttpClient(), bb.getURL(), "showthread.php?t=" + ((ThreadID) thread.getID()).getLongValue() + "&page=" + page); return req; } }