mirror of https://github.com/kiwix/libkiwix.git
Better listBooksIds supported mode.
Only have REMOTE or LOCAL is a bit restrictive. By using flags a user can specify for complex request.
This commit is contained in:
parent
2d59e12a4d
commit
b1508c0b98
|
@ -33,7 +33,15 @@ class Book;
|
||||||
class OPDSDumper;
|
class OPDSDumper;
|
||||||
|
|
||||||
enum supportedListSortBy { UNSORTED, TITLE, SIZE, DATE, CREATOR, PUBLISHER };
|
enum supportedListSortBy { UNSORTED, TITLE, SIZE, DATE, CREATOR, PUBLISHER };
|
||||||
enum supportedListMode { ALL, REMOTE, LOCAL };
|
enum supportedListMode {
|
||||||
|
ALL = 0,
|
||||||
|
LOCAL = 1,
|
||||||
|
REMOTE = 1 << 1,
|
||||||
|
NOLOCAL = 1 << 2,
|
||||||
|
NOREMOTE = 1 << 3,
|
||||||
|
VALID = 1 << 4,
|
||||||
|
NOVALID = 1 << 5
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* A Library store several books.
|
* A Library store several books.
|
||||||
*/
|
*/
|
||||||
|
@ -127,10 +135,15 @@ class Library
|
||||||
* List books in the library.
|
* List books in the library.
|
||||||
*
|
*
|
||||||
* @param mode The mode of listing :
|
* @param mode The mode of listing :
|
||||||
* - ALL list all books.
|
* - LOCAL : list only local books (with a path).
|
||||||
* (LOCAL and REMOTE. Other filters are applied).
|
* - REMOTE : list only remote books (with an url).
|
||||||
* - LOCAL list only local books.
|
* - VALID : list only valid books (without a path or with a
|
||||||
* - REMOTE list only remote books.
|
* path pointing to a valid zim file).
|
||||||
|
* - NOLOCAL : list only books without valid path.
|
||||||
|
* - NOREMOTE : list only books without url.
|
||||||
|
* - NOVALID : list only books not valid.
|
||||||
|
* - ALL : Do not do any filter (LOCAL or REMOTE)
|
||||||
|
* - Flags can be combined.
|
||||||
* @param sortBy Attribute to sort by the book list.
|
* @param sortBy Attribute to sort by the book list.
|
||||||
* @param search List only books with search in the title, description.
|
* @param search List only books with search in the title, description.
|
||||||
* @param language List only books in this language.
|
* @param language List only books in this language.
|
||||||
|
@ -141,7 +154,7 @@ class Library
|
||||||
* @return The list of bookIds corresponding to the query.
|
* @return The list of bookIds corresponding to the query.
|
||||||
*/
|
*/
|
||||||
std::vector<std::string> listBooksIds(
|
std::vector<std::string> listBooksIds(
|
||||||
supportedListMode = ALL,
|
int supportedListMode = ALL,
|
||||||
supportedListSortBy sortBy = UNSORTED,
|
supportedListSortBy sortBy = UNSORTED,
|
||||||
const std::string& search = "",
|
const std::string& search = "",
|
||||||
const std::string& language = "",
|
const std::string& language = "",
|
||||||
|
|
|
@ -303,7 +303,7 @@ std::string Comparator<PUBLISHER>::get_keys(const std::string& id)
|
||||||
|
|
||||||
|
|
||||||
std::vector<std::string> Library::listBooksIds(
|
std::vector<std::string> Library::listBooksIds(
|
||||||
supportedListMode mode,
|
int mode,
|
||||||
supportedListSortBy sortBy,
|
supportedListSortBy sortBy,
|
||||||
const std::string& search,
|
const std::string& search,
|
||||||
const std::string& language,
|
const std::string& language,
|
||||||
|
@ -314,9 +314,20 @@ std::vector<std::string> Library::listBooksIds(
|
||||||
std::vector<std::string> bookIds;
|
std::vector<std::string> bookIds;
|
||||||
for(auto& pair:books) {
|
for(auto& pair:books) {
|
||||||
auto& book = pair.second;
|
auto& book = pair.second;
|
||||||
if (mode == LOCAL && book.getPath().empty())
|
auto local = !book.getPath().empty();
|
||||||
|
if (mode & LOCAL && !local)
|
||||||
continue;
|
continue;
|
||||||
if (mode == REMOTE && (!book.getPath().empty() || book.getUrl().empty()))
|
if (mode & NOLOCAL && local)
|
||||||
|
continue;
|
||||||
|
auto valid = book.isPathValid();
|
||||||
|
if (mode & VALID && !valid)
|
||||||
|
continue;
|
||||||
|
if (mode & NOVALID && valid)
|
||||||
|
continue;
|
||||||
|
auto remote = !book.getUrl().empty();
|
||||||
|
if (mode & REMOTE && !remote)
|
||||||
|
continue;
|
||||||
|
if (mode & NOREMOTE && remote)
|
||||||
continue;
|
continue;
|
||||||
if (maxSize != 0 && book.getSize() > maxSize)
|
if (maxSize != 0 && book.getSize() > maxSize)
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue