package photato.core.entities;
import com.google.gson.annotations.Expose;
import io.gsonfire.annotations.ExposeMethodResult;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import photato.helpers.PathHelper;
public class PhotatoFolder extends PhotatoItem {
public final Map<String, PhotatoFolder> subFolders;
public final Set<PhotatoMedia> medias;
public final Set<PhotatoVideo> videos;
@Expose
public final String path;
public PhotatoFolder(Path rootFolder, Path path) {
super(rootFolder, path);
this.subFolders = new HashMap<>();
this.medias = new HashSet<>();
this.videos = new HashSet<>();
this.path = PathHelper.getPathString(rootFolder, path);
}
@ExposeMethodResult("isEmpty")
public boolean isEmpty() {
if (!this.medias.isEmpty()) {
return false;
} else {
return this.subFolders.values().stream().noneMatch((folder) -> (!folder.isEmpty()));
}
}
@ExposeMethodResult("thumbnail")
public PictureInfos getThumbnail() {
if (!this.medias.isEmpty()) {
// We try to find first horizontal thumbails, since they won't have a scaling problem when displayed
for (PhotatoMedia media : this.medias) {
if (media.thumbnail.height < media.thumbnail.width) {
return media.thumbnail;
}
}
return this.medias.iterator().next().thumbnail;
} else if (!this.videos.isEmpty()) {
return this.videos.iterator().next().thumbnail;
} else {
// If the folder does not contain pictures, will return the thumbail of one of its subfolders (if any is available)
Optional<PhotatoFolder> folderOptional = this.subFolders.values().stream().filter((PhotatoFolder folder) -> !folder.isEmpty()).findAny();
if (folderOptional.isPresent()) {
return folderOptional.get().getThumbnail();
} else {
return null;
}
}
}
}