only connect to the gif frame update signal for gif emotes

This commit is contained in:
fourtf 2018-04-18 17:20:33 +02:00
parent 692563fd8e
commit 4743e9f86c

View file

@ -65,7 +65,7 @@ void Image::loadImage()
util::NetworkRequest req(this->getUrl()); util::NetworkRequest req(this->getUrl());
req.setCaller(this); req.setCaller(this);
req.setUseQuickLoadCache(true); req.setUseQuickLoadCache(true);
req.get([lli = this](QByteArray bytes)->bool { req.get([this](QByteArray bytes) -> bool {
QByteArray copy = QByteArray::fromRawData(bytes.constData(), bytes.length()); QByteArray copy = QByteArray::fromRawData(bytes.constData(), bytes.length());
QBuffer buffer(&copy); QBuffer buffer(&copy);
buffer.open(QIODevice::ReadOnly); buffer.open(QIODevice::ReadOnly);
@ -76,18 +76,18 @@ void Image::loadImage()
bool first = true; bool first = true;
// clear stuff before loading the image again // clear stuff before loading the image again
lli->allFrames.clear(); this->allFrames.clear();
if (lli->isAnimated()) { if (this->isAnimated()) {
util::DebugCount::decrease("animated images"); util::DebugCount::decrease("animated images");
} }
if (lli->isLoaded) { if (this->isLoaded) {
util::DebugCount::decrease("loaded images"); util::DebugCount::decrease("loaded images");
} }
if (reader.imageCount() == -1) { if (reader.imageCount() == -1) {
// An error occured in the reader // An error occured in the reader
debug::Log("An error occured reading the image: '{}'", reader.errorString()); debug::Log("An error occured reading the image: '{}'", reader.errorString());
debug::Log("Image url: {}", lli->url); debug::Log("Image url: {}", this->url);
return false; return false;
} }
@ -103,32 +103,42 @@ void Image::loadImage()
if (first) { if (first) {
first = false; first = false;
lli->loadedPixmap = pixmap; this->loadedPixmap = pixmap;
} }
chatterino::messages::Image::FrameData data; chatterino::messages::Image::FrameData data;
data.duration = std::max(20, reader.nextImageDelay()); data.duration = std::max(20, reader.nextImageDelay());
data.image = pixmap; data.image = pixmap;
lli->allFrames.push_back(data); this->allFrames.push_back(data);
} }
} }
if (lli->allFrames.size() != reader.imageCount()) { if (this->allFrames.size() != reader.imageCount()) {
// debug::Log("Error: Wrong amount of images read"); // debug::Log("Error: Wrong amount of images read");
// One or more images failed to load from the buffer // One or more images failed to load from the buffer
// return false; // return false;
} }
if (lli->allFrames.size() > 1) { if (this->allFrames.size() > 1) {
lli->animated = true; if (!this->animated) {
util::postToThread([this] {
singletons::EmoteManager::getInstance().getGifUpdateSignal().connect([=]() {
this->gifUpdateTimout();
}); // For some reason when Boost signal is in
// thread scope and thread deletes the signal
// doesn't work, so this is the fix.
});
}
this->animated = true;
util::DebugCount::increase("animated images"); util::DebugCount::increase("animated images");
} }
lli->currentPixmap = lli->loadedPixmap; this->currentPixmap = this->loadedPixmap;
lli->isLoaded = true; this->isLoaded = true;
util::DebugCount::increase("loaded images"); util::DebugCount::increase("loaded images");
if (!loadedEventQueued) { if (!loadedEventQueued) {
@ -144,11 +154,6 @@ void Image::loadImage()
return true; return true;
}); });
singletons::EmoteManager::getInstance().getGifUpdateSignal().connect([=]() {
this->gifUpdateTimout();
}); // For some reason when Boost signal is in thread scope and thread deletes the signal
// doesn't work, so this is the fix.
} }
void Image::gifUpdateTimout() void Image::gifUpdateTimout()