package plugins.TestGallery;
import java.util.Random;
import freenet.client.HighLevelSimpleClient;
import freenet.keys.FreenetURI;
import freenet.pluginmanager.FredPlugin;
import freenet.pluginmanager.FredPluginHTTP;
import freenet.pluginmanager.FredPluginThreadless;
import freenet.pluginmanager.PluginHTTPException;
import freenet.pluginmanager.PluginRespirator;
import freenet.support.api.HTTPRequest;
public class TestGallery implements FredPlugin, FredPluginHTTP, FredPluginThreadless {
private final static String DEFAULT_GALLERY_URI = "CHK@sTcjGeT~bWxycEvhidh7QYh9J9fBT6YjiXrfkzsC5fQ,~dt~6lS7idVfF09oqnzMI~nXo8V-HN4T6Y7FisfyWDU,AAEA--8";
private volatile boolean goon = true;
Random rnd = new Random();
PluginRespirator pr;
private static final String plugName = "TestGallery";
public void terminate() {
goon = false;
}
private String getArrayElement(String[] array, int element) {
try {
return array[element];
} catch (Exception e) {
//e.printStackTrace();
return "";
}
}
public String handleHTTPPost(HTTPRequest request) throws PluginHTTPException {
return null;
}
private String mkDefaultPage() {
StringBuilder out = new StringBuilder();
out.append("
" + plugName + "\n");
out.append("" + plugName + "
\n");
out.append("Load gallery from the following key:
");
out.append("\n");
out.append("");
return out.toString();
}
public String handleHTTPGet(HTTPRequest request) throws PluginHTTPException {
StringBuilder out = new StringBuilder();
int page = request.getIntParam("page", 1);
String uri = request.getParam("uri", request.getPath());
if (uri.equals("")) {
return mkDefaultPage();
}
try {
int i = 0;
/* Cache later! */
HighLevelSimpleClient hlsc = pr.getHLSimpleClient();
String imglist = new String(hlsc.fetch(new FreenetURI(uri)).asByteArray()).trim();
imglist = imglist.replaceAll("\r","\n");
imglist = imglist.replaceAll("\n\n", "\n");
imglist = imglist.replaceAll("\n\n", "\n");
imglist = imglist.replaceAll("\n\n", "\n");
imglist = imglist.replaceAll("\n\n", "\n");
imglist = imglist.replaceAll("\n\n", "\n");
/* /Cache! */
String[] imgarr = imglist.split("\n");
String title = (imgarr[0].trim().replaceAll("^freenet:", "").indexOf("@") == 3)?"Untitled":imgarr[i++];
//imgarr[0] == title;
out.append("").append(title).append("\n");
out.append("").append(title).append("
Page ").append(page).append("
\n");
mkPageIndex(out, imgarr.length, page, uri+ '?');
out.append("\n");
int images = 0;
int flush = (page - 1)*6*4;
for(i = 1 ; (i < imgarr.length && images < 6*4); i++) {
// url | name | size
if (imgarr[i].trim().length() < 5)
continue;
if (flush > 0) {
flush--;
continue;
}
images++;
String imginfo[] = imgarr[i].split("\\|");
String iname = getArrayElement(imginfo, 1).trim();
String isname = iname;
if (iname.length() > 15)
isname = iname.substring(0,11) + "..." + iname.substring(iname.lastIndexOf("."));
// f2="`echo "$f" | rev | cut -d . -f2- | rev | cut -c-13`...`echo "$f" | rev | cut -d . -f1 | rev`"
//String isize = getArrayElement(imginfo, 2).trim();
String iurl = getArrayElement(imginfo, 0).trim();
iurl = iurl.replaceAll("^URI: ", "");
iurl = iurl.replaceAll("^freenet:", "");
if (!iurl.startsWith("/"))
iurl = '/' + iurl;
out.append("\n");
out.append(" .append(iurl).append("\") \n");
if (imginfo.length > 1) {
out.append(" \"").append(isname).append("\"\n");
}
out.append(" \n");
for (int j = 2 ; j < imginfo.length ; j++)
out.append(" ").append(imginfo[j].trim()).append("\n");
out.append(" | \n");
// new row?
if (i%6 == 0) {
out.append("
\n");
}
}
out.append("
\n");
mkPageIndex(out, imgarr.length, page, uri+ '?');
out.append("");
return out.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
return e.toString();// e.printStackTrace();
}
}
private void mkPageIndex(StringBuilder out, int imgarrlength, int page, String uri) {
for (int pg = 1 ; pg <= (int)Math.ceil((imgarrlength-1)/(6*4)) ; pg++) {
out.append(" ");
if (pg != page)
out.append("[").append(pg).append("]");
else
out.append('[').append(pg).append(']');
out.append(" \n");
}
}
public void runPlugin(PluginRespirator pr) {
this.pr = pr;
/*
while(goon){
try{
Thread.sleep(300000);
}catch (InterruptedException e) {
}
}
*/
}
}