Notify glyph parsing errors
Emit a signal when the glyphs are not parsed correctly.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user