package net.pms.dlna;
import java.util.ArrayList;
import net.pms.dlna.virtual.VirtualFolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FolderLimit extends VirtualFolder {
private static final Logger LOGGER = LoggerFactory.getLogger(FolderLimit.class);
private ArrayList<FolderLimitLevel> levels;
private boolean discover;
public FolderLimit() {
super("Folder Limit", null);
discover = false;
levels = new ArrayList<>();
levels.add(new FolderLimitLevel(0)); // create level 0
}
public void setStart(DLNAResource res) {
LOGGER.debug("setting folder lim " + res);
if (res == null) {
return;
}
if (discover) {
return;
}
int level = -1;
DLNAResource tmp = res;
while (tmp != null) {
if (tmp instanceof FolderLimit) {
return;
}
if (tmp instanceof FolderLimitLevel) {
level = ((FolderLimitLevel) tmp).level();
break;
}
tmp = tmp.getParent();
}
try {
FolderLimitLevel fll = levels.get(level + 1);
fll.setStart(res);
if ((fll.level() == 0) && (levels.size() > 1)) {
// we want to remove all levels 1+ so we clear all
// and read level 0, its easier
levels.clear();
levels.add(fll);
}
} catch (IndexOutOfBoundsException e) { // create new level
FolderLimitLevel fll = new FolderLimitLevel(level + 1);
fll.setStart(res);
levels.add(fll);
}
}
@Override
public void discoverChildren() {
discover = true;
for (DLNAResource res : levels) {
addChild(res);
}
discover = false;
}
@Override
public synchronized void resolve() {
this.setDiscovered(false);
this.getChildren().clear();
}
}