package com.naman14.timber.dataloaders;
import android.text.TextUtils;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Created by nv95 on 10.11.16.
*/
public class FolderLoader {
private static final String[] SUPPORTED_EXT = new String[] {
"mp3",
"mp4",
"m4a",
"aac",
"ogg",
"wav"
};
public static List<File> getMediaFiles(File dir, final boolean acceptDirs) {
ArrayList<File> list = new ArrayList<>();
list.add(new File(dir, ".."));
if (dir.isDirectory()) {
List<File> files = Arrays.asList(dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if (file.isFile()) {
String name = file.getName();
return !".nomedia".equals(name) && checkFileExt(name);
} else if (file.isDirectory()) {
return acceptDirs && checkDir(file);
} else
return false;
}
}));
Collections.sort(files, new FilenameComparator());
Collections.sort(files, new DirFirstComparator());
list.addAll(files);
}
return list;
}
public static boolean isMediaFile(File file) {
return file.exists() && file.canRead() && checkFileExt(file.getName());
}
private static boolean checkDir(File dir) {
return dir.exists() && dir.canRead() && !".".equals(dir.getName()) && dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String name = pathname.getName();
return !".".equals(name) && !"..".equals(name) && pathname.canRead() && (pathname.isDirectory() || (pathname.isFile() && checkFileExt(name)));
}
}).length != 0;
}
private static boolean checkFileExt(String name) {
if (TextUtils.isEmpty(name)) {
return false;
}
int p = name.lastIndexOf(".") + 1;
if (p < 1) {
return false;
}
String ext = name.substring(p).toLowerCase();
for (String o : SUPPORTED_EXT) {
if (o.equals(ext)) {
return true;
}
}
return false;
}
private static class FilenameComparator implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return f1.getName().compareTo(f2.getName());
}
}
private static class DirFirstComparator implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
if (f1.isDirectory() == f2.isDirectory())
return 0;
else if (f1.isDirectory() && !f2.isDirectory())
return -1;
else
return 1;
}
}
}