Use the same QNetworkAccessManager for everything, and make it use a disk cache

This commit is contained in:
David Sansome 2010-05-10 11:12:44 +00:00
parent 4ed73d74b0
commit 58da0a2f64
8 changed files with 23 additions and 10 deletions

View File

@ -19,6 +19,7 @@
#include "song.h"
#include "lastfmstationdialog.h"
#include "lastfmconfigdialog.h"
#include "radiomodel.h"
#include <boost/scoped_ptr.hpp>
@ -57,7 +58,8 @@ LastFMService::LastFMService(RadioModel* parent)
artist_list_(NULL),
tag_list_(NULL),
friends_list_(NULL),
neighbours_list_(NULL)
neighbours_list_(NULL),
network_(parent->network())
{
ReloadSettings();
@ -678,7 +680,7 @@ void LastFMService::TuneFinished() {
void LastFMService::FetchImage(const lastfm::Track& track, const QString& image_url) {
QUrl url(image_url);
QNetworkReply* reply = network_.get(QNetworkRequest(url));
QNetworkReply* reply = network_->get(QNetworkRequest(url));
image_requests_[track] = reply;
}

View File

@ -36,12 +36,12 @@ uint qHash(const lastfm::Track& track);
#include <QMap>
#include <QMenu>
#include <QNetworkAccessManager>
#include <QQueue>
#include <boost/scoped_ptr.hpp>
class QAction;
class QNetworkAccessManager;
class LastFMService : public RadioService {
Q_OBJECT
@ -180,7 +180,7 @@ class LastFMService : public RadioService {
RadioItem* friends_list_;
RadioItem* neighbours_list_;
QNetworkAccessManager network_;
QNetworkAccessManager* network_;
QHash<lastfm::Track, QNetworkReply*> image_requests_;
};

View File

@ -49,7 +49,7 @@ MagnatuneService::MagnatuneService(RadioModel* parent)
library_model_(new LibraryModel(library_backend_, this)),
library_sort_model_(new QSortFilterProxyModel(this)),
total_song_count_(0),
network_(new QNetworkAccessManager(this))
network_(parent->network())
{
connect(library_backend_, SIGNAL(TotalSongCountUpdated(int)),
SLOT(UpdateTotalSongCount(int)));

View File

@ -37,6 +37,7 @@
#include <QTranslator>
#include <QDir>
#include <QNetworkAccessManager>
#include <QNetworkDiskCache>
#include <glib/gutils.h>
@ -135,6 +136,10 @@ int main(int argc, char *argv[]) {
}
QNetworkAccessManager network;
QNetworkDiskCache network_cache;
network_cache.setCacheDirectory(QString("%1/.config/%2/networkcache/")
.arg(QDir::homePath(), QCoreApplication::organizationName()));
network.setCache(&network_cache);
// MPRIS DBus interface.
#ifdef Q_WS_X11

View File

@ -94,7 +94,7 @@ MainWindow::MainWindow(QNetworkAccessManager* network, Engine::Type engine, QWid
multi_loading_indicator_(new MultiLoadingIndicator(this)),
about_dialog_(new About),
database_(new Database(this)),
radio_model_(new RadioModel(database_, this)),
radio_model_(new RadioModel(database_, network, this)),
playlist_backend_(new PlaylistBackend(database_, this)),
playlist_(new Playlist(playlist_backend_, this)),
player_(new Player(playlist_, radio_model_->GetLastFMService(), engine, this)),

View File

@ -28,10 +28,11 @@
QMap<QString, RadioService*> RadioModel::sServices;
RadioModel::RadioModel(Database* db, QObject* parent)
RadioModel::RadioModel(Database* db, QNetworkAccessManager* network, QObject* parent)
: SimpleTreeModel<RadioItem>(new RadioItem(this), parent),
db_(db),
merged_model_(new MergedProxyModel(this))
merged_model_(new MergedProxyModel(this)),
network_(network)
{
Q_ASSERT(sServices.isEmpty());

View File

@ -22,6 +22,8 @@
#include "multiloadingindicator.h"
#include "song.h"
class QNetworkAccessManager;
class RadioService;
class LastFMService;
class MergedProxyModel;
@ -31,7 +33,7 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
Q_OBJECT
public:
RadioModel(Database* db, QObject* parent = 0);
RadioModel(Database* db, QNetworkAccessManager* network, QObject* parent = 0);
enum {
Role_Type = Qt::UserRole + 1,
@ -57,6 +59,7 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
Database* db() const { return db_; }
MergedProxyModel* merged_model() const { return merged_model_; }
QNetworkAccessManager* network() const { return network_; }
signals:
void TaskStarted(MultiLoadingIndicator::TaskType);
@ -80,6 +83,7 @@ class RadioModel : public SimpleTreeModel<RadioItem> {
static QMap<QString, RadioService*> sServices;
Database* db_;
MergedProxyModel* merged_model_;
QNetworkAccessManager* network_;
};
#endif // RADIOMODEL_H

View File

@ -15,6 +15,7 @@
*/
#include "somafmservice.h"
#include "radiomodel.h"
#include <QNetworkAccessManager>
#include <QNetworkRequest>
@ -35,7 +36,7 @@ SomaFMService::SomaFMService(RadioModel* parent)
: RadioService(kServiceName, parent),
root_(NULL),
context_menu_(new QMenu),
network_(new QNetworkAccessManager(this))
network_(parent->network())
{
context_menu_->addAction(QIcon(":media-playback-start.png"), tr("Add to playlist"), this, SLOT(AddToPlaylist()));
context_menu_->addSeparator();