File indexing completed on 2024-04-21 04:49:07
0001 /* 0002 * SPDX-FileCopyrightText: 2021 George Florea Bănuș <georgefb899@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #include "thumbnailimageprovider.h" 0008 0009 #include "application.h" 0010 #include "worker.h" 0011 0012 #include <QFile> 0013 #include <QIcon> 0014 0015 ThumbnailImageProvider::ThumbnailImageProvider() 0016 { 0017 } 0018 0019 QQuickImageResponse *ThumbnailImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize) 0020 { 0021 auto response = new ThumbnailResponse(id, requestedSize); 0022 return response; 0023 } 0024 0025 ThumbnailResponse::ThumbnailResponse(const QString &id, const QSize &requestedSize) 0026 { 0027 connect( 0028 Worker::instance(), 0029 &Worker::thumbnailSuccess, 0030 this, 0031 [=](const QString &path, const QImage &image) { 0032 if (path == QUrl::fromUserInput(id).toLocalFile()) { 0033 m_texture = QQuickTextureFactory::textureFactoryForImage(image); 0034 Q_EMIT finished(); 0035 } 0036 }, 0037 Qt::QueuedConnection); 0038 0039 connect( 0040 Worker::instance(), 0041 &Worker::thumbnailFail, 0042 this, 0043 [=]() { 0044 auto url = QUrl::fromUserInput(id); 0045 if (url.scheme() != QStringLiteral("file")) { 0046 return; 0047 } 0048 QString mimeType = Application::mimeType(url); 0049 QString iconName; 0050 if (mimeType.startsWith(QStringLiteral("video/"))) { 0051 iconName = QStringLiteral("video-x-generic"); 0052 } else if (mimeType.startsWith(QStringLiteral("audio/"))) { 0053 iconName = QStringLiteral("audio-x-generic"); 0054 } else { 0055 return; 0056 } 0057 auto icon = QIcon::fromTheme(iconName).pixmap(requestedSize); 0058 m_texture = QQuickTextureFactory::textureFactoryForImage(icon.toImage()); 0059 0060 Q_EMIT finished(); 0061 }, 0062 Qt::QueuedConnection); 0063 getPreview(id, requestedSize); 0064 } 0065 0066 void ThumbnailResponse::getPreview(const QString &id, const QSize &requestedSize) 0067 { 0068 auto url = QUrl::fromUserInput(id); 0069 if (QFile(url.toLocalFile()).exists()) { 0070 Worker::instance()->makePlaylistThumbnail(url.toLocalFile(), requestedSize.width()); 0071 } 0072 0073 if (url.scheme() == QStringLiteral("http") || url.scheme() == QStringLiteral("https")) { 0074 auto icon = QIcon::fromTheme(QStringLiteral("im-youtube"), QIcon::fromTheme(QStringLiteral("video-x-generic"))); 0075 m_texture = QQuickTextureFactory::textureFactoryForImage(icon.pixmap(requestedSize).toImage()); 0076 Q_EMIT finished(); 0077 } 0078 } 0079 0080 QQuickTextureFactory *ThumbnailResponse::textureFactory() const 0081 { 0082 return m_texture; 0083 }