Mercurial > minori
diff src/gui/widgets/poster.cc @ 378:5912dafc6e28
anime: add poster cache
:)
| author | Paper <paper@tflc.us> |
|---|---|
| date | Wed, 05 Nov 2025 12:50:35 -0500 |
| parents | ea3a74ed2ef9 |
| children |
line wrap: on
line diff
--- a/src/gui/widgets/poster.cc Fri Jul 25 12:40:25 2025 -0400 +++ b/src/gui/widgets/poster.cc Wed Nov 05 12:50:35 2025 -0500 @@ -18,6 +18,24 @@ #include <iostream> +GetPosterThread::GetPosterThread(QObject *parent) : QThread(parent) +{ +} + +void GetPosterThread::SetId(int id) +{ + id_ = id; +} + +void GetPosterThread::run() +{ + /* this sucks cuz we can't really STOP the thread easily + * without making it fully finish */ + QImage img = Anime::db.GetAnimePoster(id_); + + emit Finished(img); +} + Poster::Poster(QWidget *parent) : QFrame(parent) { QHBoxLayout *layout = new QHBoxLayout(this); @@ -31,8 +49,8 @@ label_.setAlignment(Qt::AlignCenter); layout->addWidget(&label_); - get_thread_ = new HTTP::RequestThread(HTTP::Type::Get); - connect(get_thread_, &HTTP::RequestThread::ReceivedData, this, &Poster::ImageDownloadFinished); + get_thread_ = new GetPosterThread(nullptr); + connect(get_thread_, &GetPosterThread::Finished, this, &Poster::ImageDownloadFinished); } Poster::Poster(const Anime::Anime &anime, QWidget *parent) : Poster(parent) @@ -48,11 +66,10 @@ void Poster::DownloadPoster() { - if (get_thread_->isRunning()) - get_thread_->Stop(); + /* ;-; */ get_thread_->wait(); - get_thread_->SetUrl(poster_url_); + get_thread_->SetId(id_); get_thread_->start(); } @@ -60,11 +77,13 @@ { label_.clear(); - poster_url_ = anime.GetPosterUrl(); - if (isVisible()) + id_ = anime.GetId(); + + if (isVisible()) { DownloadPoster(); - else + } else { need_refresh_ = true; + } std::optional<std::string> url = anime.GetServiceUrl(session.config.service); if (url) @@ -98,9 +117,9 @@ } } -void Poster::ImageDownloadFinished(const QByteArray &arr) +void Poster::ImageDownloadFinished(const QImage &img) { - img_.loadFromData(arr); + img_ = img; RenderToLabel(); }
