package net.pms.dlna; import java.io.File; import java.util.ArrayList; import java.util.List; import net.pms.PMS; public class FileSearch implements SearchObj { private ArrayList<RealFile> folders; public FileSearch(List<RealFile> folders) { this.folders = new ArrayList<>(folders); } public void update(List<RealFile> folders) { this.folders = (ArrayList<RealFile>) folders; } @Override public void search(String searchString, DLNAResource searcher) { searchString = searchString.toLowerCase(); for (RealFile res : folders) { String name = res.getName().toLowerCase(); if (name.contains(searchString)) { // easy case file contians search string, add it and be gone searcher.addChild(res.clone()); continue; } if (res.getFile().isDirectory()) { // tricky case, recursive in to folders File f = res.getFile(); searchFiles(f.listFiles(), searchString, searcher, 0); } } } private void searchFiles(File[] files, String str, DLNAResource searcher, int cnt) { if (files == null) { return; } for (File f : files) { String name = f.getName().toLowerCase(); if (name.contains(str)) { searcher.addChild(new RealFile(f)); continue; } if (f.isDirectory()) { if (cnt >= PMS.getConfiguration().getSearchDepth()) { // this is here to avoid endless looping return; } searchFiles(f.listFiles(), str, searcher, cnt + 1); } } } }