blob: 6a2a337f2608f6edaa466cfddd1c01de799fc4bd [file] [log] [blame]
/*******************************************************************************
* 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;
}
}