Notify glyph parsing errors

Emit a signal when the glyphs are not parsed correctly.
This commit is contained in:
Thiago Marcos P. Santos
2015-05-27 16:16:07 +03:00
parent 4819379020
commit 48875d8d6c
3 changed files with 15 additions and 4 deletions

View File

@@ -23,14 +23,14 @@ GlyphPBF::GlyphPBF(const std::string& glyphURL,
const GlyphLoadingFailedCallback& failureCallback)
: parsed(false), env(env_) {
// Load the glyph set URL
std::string url = util::replaceTokens(glyphURL, [&](const std::string &name) -> std::string {
url = util::replaceTokens(glyphURL, [&](const std::string &name) -> std::string {
if (name == "fontstack") return util::percentEncode(fontStack);
if (name == "range") return util::toString(glyphRange.first) + "-" + util::toString(glyphRange.second);
return "";
});
// The prepare call jumps back to the main thread.
req = env.request({ Resource::Kind::Glyphs, url }, [&, url, successCallback, failureCallback](const Response &res) {
req = env.request({ Resource::Kind::Glyphs, url }, [&, successCallback, failureCallback](const Response &res) {
req = nullptr;
if (res.status != Response::Successful) {

View File

@@ -29,6 +29,10 @@ public:
void parse(FontStack &stack);
bool isParsed() const;
std::string getURL() const {
return url;
}
private:
GlyphPBF(const GlyphPBF &) = delete;
GlyphPBF(GlyphPBF &&) = delete;
@@ -36,6 +40,7 @@ private:
GlyphPBF &operator=(GlyphPBF &&) = delete;
std::string data;
std::string url;
std::atomic<bool> parsed;
Environment& env;

View File

@@ -34,8 +34,14 @@ bool GlyphStore::requestGlyphRangesIfNeeded(const std::string& fontStackName,
auto successCallback = [this, fontStackName](GlyphPBF* glyph) {
auto fontStack = createFontStack(fontStackName);
glyph->parse(**fontStack);
asyncEmitGlyphRangeLoaded->send();
try {
glyph->parse(**fontStack);
asyncEmitGlyphRangeLoaded->send();
} catch (const std::exception&) {
std::lock_guard<std::mutex> lock(errorMessageMutex);
errorMessage = "Failed to parse [" + glyph->getURL() + "]";
asyncEmitGlyphRangeLoadedingFailed->send();
}
};
auto failureCallback = [this](const std::string& message) {