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();
 }