package com.gmail.dpierron.calibre.opds; import com.gmail.dpierron.calibre.configuration.Icons; import com.gmail.dpierron.calibre.datamodel.Book; import com.gmail.dpierron.calibre.datamodel.Option; import com.gmail.dpierron.tools.i18n.Localization; import com.gmail.dpierron.tools.Helper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jdom2.Element; import java.io.IOException; import java.util.List; public class RecentBooksSubCatalog extends BooksSubCatalog { private final static Logger logger = LogManager.getLogger(RecentBooksSubCatalog.class); public RecentBooksSubCatalog(List<Object> stuffToFilterOut, List<Book> books) { super(stuffToFilterOut, books); sortBooks(); setCatalogType(Constants.RECENT_TYPE); } public RecentBooksSubCatalog(List<Book> books) { super(books); sortBooks(); setCatalogType(Constants.RECENT_TYPE); } public boolean isBookTheStepUnit() { return true; } private void sortBooks() { sortBooksByTimestamp(getBooks()); setBooks(new Helper.ListCopier<Book>().copyList(getBooks(), currentProfile.getBooksInRecentAdditions())); } public Element getCatalog(Breadcrumbs pBreadcrumbs, boolean inSubDir) throws IOException { if (Helper.isNullOrEmpty(getBooks())) return null; String filename = getCatalogBaseFolderFileName(); String title = Localization.Main.getText("recent.title"); String urn = Constants.INITIAL_URN_PREFIX + getCatalogType(); String summary = ""; if (getBooks().size() > 1) summary = Localization.Main.getText("recent.list", getBooks().size()); else if (getBooks().size() == 1) summary = Localization.Main.getText("recent.list.single"); if (logger.isTraceEnabled()) logger.trace("getSubCatalogEntry Breadcrumbs=" + pBreadcrumbs.toString()); // String urlInItsSubfolder = CatalogManager.getCatalogFileUrl(filename + Constants.XML_EXTENSION, pBreadcrumbs.size() > 1); Element result = getListOfBooks(pBreadcrumbs, getBooks(), inSubDir, 0, title, summary, urn, filename, SplitOption.SplitByDate, // #751211: Use external icons option useExternalIcons ? getIconPrefix(inSubDir) + Icons.ICONFILE_RECENT : Icons.ICON_RECENT, null, // No first element Option.INCLUDE_TIMESTAMP); return result; } }