Merge pull request #675 from kiwix/fix_android

Revert removing of deprecated methods used by android wrapper.
This commit is contained in:
Kelson 2022-01-14 16:19:14 +01:00 committed by GitHub
commit 367e5d2636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 144 additions and 2 deletions

View File

@ -91,6 +91,14 @@ Meson. If you want statically linked libraries, you can add
Depending of you system, `ninja` may be called `ninja-build`. Depending of you system, `ninja` may be called `ninja-build`.
The android wrapper uses deprecated methods of libkiwix so it cannot be compiled
with `werror=true` (the default). So you must pass `-Dwerror=false` to meson:
```bash
meson . build -Dwrapper=android -Dwerror=false
ninja -C build
```
Testing Testing
------- -------

View File

@ -329,6 +329,28 @@ class Reader
*/ */
Entry getEntryFromTitle(const std::string& title) const; Entry getEntryFromTitle(const std::string& title) const;
/**
* Search for entries with title starting with prefix (case sensitive).
*
* Suggestions are stored in an internal vector and can be retrieved using
* `getNextSuggestion` method.
* This method is not thread safe and is deprecated. Use :
* bool searchSuggestions(const string& prefix,
* unsigned int suggestionsCount,
* SuggestionsList_t& results);
*
* @param prefix The prefix to search.
* @param suggestionsCount How many suggestions to search for.
* @param reset If true, remove previous suggestions in the internal vector.
* If false, add suggestions to the internal vector
* (until internal vector size is suggestionCount (or no more
* suggestion))
* @return True if some suggestions have been added to the internal vector.
*/
DEPRECATED bool searchSuggestions(const string& prefix,
unsigned int suggestionsCount,
const bool reset = true);
/** /**
* Search for entries with title starting with prefix (case sensitive). * Search for entries with title starting with prefix (case sensitive).
* *
@ -344,6 +366,28 @@ class Reader
unsigned int suggestionsCount, unsigned int suggestionsCount,
SuggestionsList_t& resuls); SuggestionsList_t& resuls);
/**
* Search for entries for the given prefix.
*
* If the zim file has a internal fulltext index, the suggestions will be
* searched using it.
* Else the suggestions will be search using `searchSuggestions` while trying
* to be smart about case sensitivity (using `getTitleVariants`).
*
* In any case, suggestions are stored in an internal vector and can be
* retrieved using `getNextSuggestion` method.
* The internal vector will be reset.
* This method is not thread safe and is deprecated. Use :
* bool searchSuggestionsSmart(const string& prefix,
* unsigned int suggestionsCount,
* SuggestionsList_t& results);
*
* @param prefix The prefix to search for.
* @param suggestionsCount How many suggestions to search for.
*/
DEPRECATED bool searchSuggestionsSmart(const string& prefix,
unsigned int suggestionsCount);
/** /**
* Search for entries for the given prefix. * Search for entries for the given prefix.
* *
@ -390,6 +434,22 @@ class Reader
*/ */
std::vector<std::string> getTitleVariants(const std::string& title) const; std::vector<std::string> getTitleVariants(const std::string& title) const;
/**
* Get the next suggestion title.
*
* @param[out] title the title of the suggestion.
* @return True if title has been set.
*/
DEPRECATED bool getNextSuggestion(string& title);
/**
* Get the next suggestion title and url.
*
* @param[out] title the title of the suggestion.
* @param[out] url the url of the suggestion.
* @return True if title and url have been set.
*/
DEPRECATED bool getNextSuggestion(string& title, string& url);
/** /**
* Get if we can check zim file integrity (has a checksum). * Get if we can check zim file integrity (has a checksum).
@ -425,6 +485,9 @@ class Reader
std::shared_ptr<zim::Archive> zimArchive; std::shared_ptr<zim::Archive> zimArchive;
std::string zimFilePath; std::string zimFilePath;
SuggestionsList_t suggestions;
SuggestionsList_t::iterator suggestionsOffset;
private: private:
std::map<const std::string, unsigned int> parseCounterMetadata() const; std::map<const std::string, unsigned int> parseCounterMetadata() const;
}; };

View File

@ -273,6 +273,32 @@ bool Reader::hasFulltextIndex() const
return zimArchive->hasFulltextIndex(); return zimArchive->hasFulltextIndex();
} }
/* Search titles by prefix */
bool Reader::searchSuggestions(const string& prefix,
unsigned int suggestionsCount,
const bool reset)
{
/* Reset the suggestions otherwise check if the suggestions number is less
* than the suggestionsCount */
if (reset) {
this->suggestions.clear();
this->suggestionsOffset = this->suggestions.begin();
} else {
if (this->suggestions.size() > suggestionsCount) {
return false;
}
}
auto ret = searchSuggestions(prefix, suggestionsCount, this->suggestions);
/* Set the cursor to the begining */
this->suggestionsOffset = this->suggestions.begin();
return ret;
}
bool Reader::searchSuggestions(const string& prefix, bool Reader::searchSuggestions(const string& prefix,
unsigned int suggestionsCount, unsigned int suggestionsCount,
SuggestionsList_t& results) SuggestionsList_t& results)
@ -333,6 +359,19 @@ std::vector<std::string> Reader::getTitleVariants(
} }
bool Reader::searchSuggestionsSmart(const string& prefix,
unsigned int suggestionsCount)
{
this->suggestions.clear();
this->suggestionsOffset = this->suggestions.begin();
auto ret = searchSuggestionsSmart(prefix, suggestionsCount, this->suggestions);
this->suggestionsOffset = this->suggestions.begin();
return ret;
}
/* Try also a few variations of the prefix to have better results */ /* Try also a few variations of the prefix to have better results */
bool Reader::searchSuggestionsSmart(const string& prefix, bool Reader::searchSuggestionsSmart(const string& prefix,
unsigned int suggestionsCount, unsigned int suggestionsCount,
@ -371,6 +410,38 @@ bool Reader::searchSuggestionsSmart(const string& prefix,
return results.size() > 0; return results.size() > 0;
} }
/* Get next suggestion */
bool Reader::getNextSuggestion(string& title)
{
if (this->suggestionsOffset != this->suggestions.end()) {
/* title */
title = (*(this->suggestionsOffset)).getTitle();
/* increment the cursor for the next call */
this->suggestionsOffset++;
return true;
}
return false;
}
bool Reader::getNextSuggestion(string& title, string& url)
{
if (this->suggestionsOffset != this->suggestions.end()) {
/* title */
title = (*(this->suggestionsOffset)).getTitle();
url = (*(this->suggestionsOffset)).getPath();
/* increment the cursor for the next call */
this->suggestionsOffset++;
return true;
}
return false;
}
/* Check if the file has as checksum */ /* Check if the file has as checksum */
bool Reader::canCheckIntegrity() const bool Reader::canCheckIntegrity() const
{ {