package com.openfarmanager.android.filesystem.actions;
import com.openfarmanager.android.utils.Extensions;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Set;
import static com.openfarmanager.android.utils.FileUtilsExt.findFileByName;
public class DiffDirectoriesTask {
protected Set<File> mActivePanelFiles;
protected Set<File> mInactivePanelFiles;
private DiffDirectoriesTask.OnActionListener mListener;
public DiffDirectoriesTask(DiffDirectoriesTask.OnActionListener listener,
Set<File> activePanelFiles, Set<File> inactivePanelFiles) {
mActivePanelFiles = activePanelFiles;
mInactivePanelFiles = inactivePanelFiles;
mListener = listener;
}
public void execute() {
Extensions.runAsync(new Runnable() {
@Override
public void run() {
LinkedHashSet<File> activePanelDiffFiles = new LinkedHashSet<File>();
LinkedHashSet<File> inactivePanelDiffFiles = new LinkedHashSet<File>();
for (File file : mActivePanelFiles) {
if (file.isDirectory()) continue;
File theFile = findFileByName(mInactivePanelFiles, file);
if (theFile == null || !compareFiles(theFile, file)) {
activePanelDiffFiles.add(file);
}
}
for (File file : mInactivePanelFiles) {
if (file.isDirectory()) continue;
File theFile = findFileByName(mActivePanelFiles, file);
if (theFile == null || !compareFiles(theFile, file)) {
inactivePanelDiffFiles.add(file);
}
}
mListener.onActionFinish(activePanelDiffFiles, inactivePanelDiffFiles);
}
});
}
private boolean compareFiles(File file1, File file2) {
try {
return FileUtils.contentEquals(file1, file2);
} catch (IOException e) {
return false;
}
}
public static interface OnActionListener {
void onActionFinish(LinkedHashSet<File> activePanelDiffFiles, LinkedHashSet<File> inactivePanelDiffFiles);
}
}