void WebResourceManager::getImage(const QString& requestedURL) const { // if something explicitly on the disk is requested, then return it if(requestedURL.length() > 10 && requestedURL.mid(0, 9).compare("asset:///") == 0) { emit onImageReady(requestedURL, requestedURL); return; } // check if cache folder exists, if not, creates it QString directory = QDir::homePath() + "/Cache/"; if (!QFile::exists(directory)) { QDir dir; dir.mkpath(directory); } // check if image already available QUrl url = QUrl(requestedURL); // Check if image is stored on disc // The qHash is a bucket type hash so the doubling is to remove possible collisions. QString diskPath = QDir::homePath() + "/Cache/" + QString::number(qHash(url.host())) + "_" + QString::number(qHash(url.path())) + ".PNG"; QFile imageFile(diskPath); // If the file exists, send a signal the image is ready if (imageFile.exists()) { emit onImageReady(requestedURL, diskPath); } else { // check if the file is being downloaded, if so, skip it m_EditQueue->lockForRead(); for(int i = 0 ; i < m_DownloadQueue->length() ; ++i) if(m_DownloadQueue->at(i).compare(requestedURL) == 0) { m_EditQueue->unlock(); return ; } m_EditQueue->unlock(); emit onImageReady(requestedURL,"loading"); // otherwise let's download the file QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply* reply = HFRNetworkAccessManager::get()->get(request); bool ok = connect(reply, SIGNAL(finished()), this, SLOT(checkReply())); Q_ASSERT(ok); Q_UNUSED(ok); } }
void WebResourceManager::checkReply() { QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender()); if (reply) { if (reply->error() == QNetworkReply::NoError) { const int available = reply->bytesAvailable(); if (available > 0) { QImage qImage; qImage.loadFromData(reply->readAll()); if (qImage.isNull()) { return; } QString diskPath = QDir::homePath() + "/Cache/" + QString::number(qHash(reply->url().host())) + "_" + QString::number(qHash(reply->url().path())) + ".PNG"; if (qImage.save(diskPath)) { emit onImageReady(reply->url().toString(), diskPath); } // remove item from download queue m_EditQueue->lockForWrite(); for(int i = 0 ; i < m_DownloadQueue->length() ; ++i) if(m_DownloadQueue->at(i).compare(reply->url().toString()) == 0) { m_DownloadQueue->removeAt(i); m_EditQueue->unlock(); break; } m_EditQueue->unlock(); } } } }
LocalImageLoaderPrivate::LocalImageLoaderPrivate(LocalImageLoader *loader, QThread *thread) : QObject(0) , loader(loader) { moveToThread(thread); connect(loader, SIGNAL(needToPrepare()), this, SLOT(prepareImages())); connect(this, SIGNAL(imageReady()), loader, SLOT(onImageReady())); connect(this, SIGNAL(imageFailed(quint64)), loader, SLOT(onImageFailed(quint64))); };
QIcon RecaptchaPluginConfig::icon() const { const QPixmap icon = ImageCache::instance()->image(iconFilePath()); if (icon.isNull()) { connect(ImageCache::instance(), SIGNAL(imageReady(QString)), this, SLOT(onImageReady(QString))); return QPixmap(DEFAULT_ICON); } return icon; }
VimeoPlaylistDialog::VimeoPlaylistDialog(VimeoVideo *video, QWidget *parent) : Dialog(parent), m_video(video), m_playlist(0), m_model(new VimeoPlaylistModel(this)), m_cache(new ImageCache), m_view(new ListView(this)), m_tabBar(new QTabBar(this)), m_stack(new QStackedWidget(this)), m_scrollArea(0), m_titleEdit(0), m_descriptionEdit(0), m_passwordEdit(0), m_label(new QLabel(QString("<p align='center'; style='font-size: 40px; color: %1'>%2</p>") .arg(palette().color(QPalette::Mid).name()).arg(tr("No albums found")), this)), m_buttonBox(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Vertical, this)), m_layout(new QGridLayout(this)) { setWindowTitle(tr("Add to album")); setMinimumHeight(340); m_view->setModel(m_model); m_view->setItemDelegate(new PlaylistDelegate(m_cache, VimeoPlaylistModel::DateRole, VimeoPlaylistModel::ThumbnailUrlRole, VimeoPlaylistModel::TitleRole, VimeoPlaylistModel::UsernameRole, VimeoPlaylistModel::VideoCountRole, m_view)); m_tabBar->addTab(tr("Albums")); m_tabBar->addTab(tr("New album")); m_tabBar->setExpanding(false); m_tabBar->setDrawBase(false); m_tabBar->setStyleSheet("QTabBar::tab { height: 40px; }"); m_stack->addWidget(m_view); m_stack->addWidget(m_label); m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); m_layout->addWidget(m_tabBar, 0, 0); m_layout->addWidget(m_stack, 1, 0); m_layout->addWidget(m_buttonBox, 1, 1, 2, 1); m_layout->setRowStretch(1, 1); connect(m_cache, SIGNAL(imageReady()), this, SLOT(onImageReady())); connect(m_model, SIGNAL(statusChanged(QVimeo::ResourcesRequest::Status)), this, SLOT(onModelStatusChanged(QVimeo::ResourcesRequest::Status))); connect(m_view, SIGNAL(activated(QModelIndex)), this, SLOT(addToPlaylist(QModelIndex))); connect(m_tabBar, SIGNAL(currentChanged(int)), this, SLOT(onTabIndexChanged(int))); connect(m_buttonBox, SIGNAL(rejected()), this, SLOT(reject())); connect(m_buttonBox, SIGNAL(accepted()), this, SLOT(createNewPlaylist())); }
VimeoUsersWindow::VimeoUsersWindow(StackedWindow *parent) : StackedWindow(parent), m_model(new VimeoUserModel(this)), m_cache(new ImageCache), m_view(new ListView(this)), m_delegate(new UserDelegate(m_cache, VimeoUserModel::SubscriberCountRole, VimeoUserModel::ThumbnailUrlRole, VimeoUserModel::UsernameRole, m_view)), m_viewGroup(new QActionGroup(this)), m_listAction(new QAction(tr("List"), this)), m_gridAction(new QAction(tr("Grid"), this)), m_reloadAction(new QAction(tr("Reload"), this)), m_label(new QLabel(QString("<p align='center'; style='font-size: 40px; color: %1'>%2</p>") .arg(palette().color(QPalette::Mid).name()).arg(tr("No users found")), this)) { setWindowTitle(tr("Users")); setCentralWidget(new QWidget); m_view->setModel(m_model); m_view->setItemDelegate(m_delegate); m_listAction->setCheckable(true); m_listAction->setChecked(true); m_gridAction->setCheckable(true); m_viewGroup->setExclusive(true); m_viewGroup->addAction(m_listAction); m_viewGroup->addAction(m_gridAction); m_reloadAction->setEnabled(false); m_label->hide(); m_layout = new QVBoxLayout(centralWidget()); m_layout->addWidget(m_view); m_layout->addWidget(m_label); m_layout->setContentsMargins(0, 0, 0, 0); menuBar()->addAction(m_listAction); menuBar()->addAction(m_gridAction); menuBar()->addAction(m_reloadAction); connect(m_model, SIGNAL(statusChanged(QVimeo::ResourcesRequest::Status)), this, SLOT(onModelStatusChanged(QVimeo::ResourcesRequest::Status))); connect(m_cache, SIGNAL(imageReady()), this, SLOT(onImageReady())); connect(m_view, SIGNAL(activated(QModelIndex)), this, SLOT(showUser(QModelIndex))); connect(m_listAction, SIGNAL(triggered()), this, SLOT(enableListMode())); connect(m_gridAction, SIGNAL(triggered()), this, SLOT(enableGridMode())); connect(m_reloadAction, SIGNAL(triggered()), m_model, SLOT(reload())); if (Settings::instance()->defaultViewMode() == "grid") { m_gridAction->trigger(); } }
SoundCloudPlaylistsWindow::SoundCloudPlaylistsWindow(StackedWindow *parent) : StackedWindow(parent), m_model(new SoundCloudPlaylistModel(this)), m_cache(new ImageCache), m_nowPlayingAction(new NowPlayingAction(this)), m_view(new ListView(this)), m_reloadAction(new QAction(tr("Reload"), this)), m_label(new QLabel(QString("<p align='center'; style='font-size: 40px; color: %1'>%2</p>") .arg(palette().color(QPalette::Mid).name()).arg(tr("No sets found")), this)) { setWindowTitle(tr("Sets")); setCentralWidget(new QWidget); m_view->setModel(m_model); m_view->setItemDelegate(new PlaylistDelegate(m_cache, SoundCloudPlaylistModel::ArtistRole, SoundCloudPlaylistModel::DateRole, SoundCloudPlaylistModel::ThumbnailUrlRole, SoundCloudPlaylistModel::TitleRole, SoundCloudPlaylistModel::TrackCountRole, m_view)); m_reloadAction->setEnabled(false); m_label->hide(); m_layout = new QVBoxLayout(centralWidget()); m_layout->addWidget(m_view); m_layout->addWidget(m_label); m_layout->setContentsMargins(0, 0, 0, 0); menuBar()->addAction(m_reloadAction); menuBar()->addAction(m_nowPlayingAction); connect(m_model, SIGNAL(statusChanged(QSoundCloud::ResourcesRequest::Status)), this, SLOT(onModelStatusChanged(QSoundCloud::ResourcesRequest::Status))); connect(m_cache, SIGNAL(imageReady()), this, SLOT(onImageReady())); connect(m_view, SIGNAL(activated(QModelIndex)), this, SLOT(showPlaylist(QModelIndex))); connect(m_reloadAction, SIGNAL(triggered()), m_model, SLOT(reload())); }
void SoundCloudPlaylistWindow::loadBaseUi() { setWindowTitle(tr("Set")); setCentralWidget(new QWidget); m_view->setModel(m_model); m_view->setItemDelegate(m_delegate); m_view->setContextMenuPolicy(Qt::CustomContextMenu); m_thumbnail->setFixedSize(320, 320); m_thumbnail->setFallbackSource(QUrl::fromLocalFile("/usr/share/icons/hicolor/295x295/hildon/mediaplayer_default_album.png")); m_avatar->setFixedSize(60, 60); m_avatar->setFallbackSource(QUrl::fromLocalFile("/usr/share/icons/hicolor/64x64/hildon/general_default_avatar.png")); m_titleLabel->setWordWrap(true); m_dateLabel->setStyleSheet(QString("color: %1; font-size: 13pt").arg(palette().color(QPalette::Mid).name())); m_artistLabel->setStyleSheet("font-size: 13pt"); m_noTracksLabel->hide(); m_reloadAction->setEnabled(false); m_contextMenu->addAction(m_queueAction); m_contextMenu->addAction(m_downloadAction); m_contextMenu->addAction(m_shareAction); QWidget *scrollWidget = new QWidget(m_scrollArea); QGridLayout *grid = new QGridLayout(scrollWidget); grid->addWidget(m_thumbnail, 0, 0, 1, 2, Qt::AlignLeft); grid->addWidget(m_titleLabel, 1, 0, 1, 2); grid->addWidget(m_avatar, 2, 0, 2, 1, Qt::AlignLeft); grid->addWidget(m_artistLabel, 2, 1, Qt::AlignLeft | Qt::AlignTop); grid->addWidget(m_dateLabel, 3, 1, Qt::AlignLeft | Qt::AlignBottom); grid->addWidget(m_descriptionLabel, 4, 0, 1, 2); grid->setRowStretch(4, 1); grid->setColumnStretch(1, 1); grid->setContentsMargins(0, 0, 0, 0); m_scrollArea->setWidget(scrollWidget); m_scrollArea->setWidgetResizable(true); m_scrollArea->setFixedWidth(330); m_layout = new QHBoxLayout(centralWidget()); m_layout->addWidget(m_scrollArea); m_layout->addWidget(m_view); m_layout->addWidget(m_noTracksLabel); m_layout->setStretch(1, 1); m_layout->setStretch(2, 1); m_layout->setContentsMargins(0, 0, 0, 0); menuBar()->addAction(m_reloadAction); menuBar()->addAction(m_queuePlaylistAction); menuBar()->addAction(m_nowPlayingAction); connect(m_model, SIGNAL(statusChanged(QSoundCloud::ResourcesRequest::Status)), this, SLOT(onModelStatusChanged(QSoundCloud::ResourcesRequest::Status))); connect(m_cache, SIGNAL(imageReady()), this, SLOT(onImageReady())); connect(m_view, SIGNAL(activated(QModelIndex)), this, SLOT(showTrack(QModelIndex))); connect(m_view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showContextMenu(QPoint))); connect(m_thumbnail, SIGNAL(clicked()), this, SLOT(playPlaylist())); connect(m_delegate, SIGNAL(thumbnailClicked(QModelIndex)), this, SLOT(playTrack(QModelIndex))); connect(m_reloadAction, SIGNAL(triggered()), m_model, SLOT(reload())); connect(m_queuePlaylistAction, SIGNAL(triggered()), this, SLOT(queuePlaylist())); connect(m_avatar, SIGNAL(clicked()), this, SLOT(showArtist())); connect(m_descriptionLabel, SIGNAL(anchorClicked(QUrl)), this, SLOT(showResource(QUrl))); connect(m_queueAction, SIGNAL(triggered()), this, SLOT(queueTrack())); connect(m_downloadAction, SIGNAL(triggered()), this, SLOT(downloadTrack())); connect(m_shareAction, SIGNAL(triggered()), this, SLOT(shareTrack())); if (!SoundCloud::instance()->userId().isEmpty()) { m_favouriteAction = new QAction(this); m_contextMenu->addAction(m_favouriteAction); connect(m_favouriteAction, SIGNAL(triggered()), this, SLOT(setTrackFavourite())); } }
void RecaptchaPluginConfig::onImageReady(const QString &path) { if (path == iconFilePath()) { emit changed(this); disconnect(ImageCache::instance(), SIGNAL(imageReady(QString)), this, SLOT(onImageReady(QString))); } }