|
|
@ -23,20 +23,19 @@ |
|
|
|
#define RSS_H |
|
|
|
#define RSS_H |
|
|
|
|
|
|
|
|
|
|
|
// MAX ITEM A STREAM
|
|
|
|
// MAX ITEM A STREAM
|
|
|
|
#define STREAM_MAX_ITEM 18 |
|
|
|
#define STREAM_MAX_ITEM 50 |
|
|
|
// FIXME: not used yet
|
|
|
|
// 10min
|
|
|
|
#define GLOBAL_MAX_ITEM 150 |
|
|
|
#define STREAM_REFRESH_INTERVAL 600000 |
|
|
|
// avoid crash if too many refresh
|
|
|
|
|
|
|
|
#define REFRESH_FREQ_MAX 5000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <QFile> |
|
|
|
#include <QFile> |
|
|
|
#include <QImage> |
|
|
|
|
|
|
|
#include <QList> |
|
|
|
#include <QList> |
|
|
|
#include <QTemporaryFile> |
|
|
|
#include <QTemporaryFile> |
|
|
|
#include <QSettings> |
|
|
|
#include <QSettings> |
|
|
|
#include <QDomDocument> |
|
|
|
#include <QDomDocument> |
|
|
|
#include <QTime> |
|
|
|
#include <QTime> |
|
|
|
#include <QUrl> |
|
|
|
#include <QUrl> |
|
|
|
|
|
|
|
#include <QTimer> |
|
|
|
|
|
|
|
#include <QImage> |
|
|
|
#include <QHash> |
|
|
|
#include <QHash> |
|
|
|
|
|
|
|
|
|
|
|
#include "misc.h" |
|
|
|
#include "misc.h" |
|
|
@ -134,7 +133,7 @@ class RssStream : public QObject{ |
|
|
|
public slots : |
|
|
|
public slots : |
|
|
|
// read and store the downloaded rss' informations
|
|
|
|
// read and store the downloaded rss' informations
|
|
|
|
void processDownloadedFile(QString file_path) { |
|
|
|
void processDownloadedFile(QString file_path) { |
|
|
|
// delete the former file
|
|
|
|
// delete the old file
|
|
|
|
if(QFile::exists(filePath)) { |
|
|
|
if(QFile::exists(filePath)) { |
|
|
|
QFile::remove(filePath); |
|
|
|
QFile::remove(filePath); |
|
|
|
} |
|
|
|
} |
|
|
@ -146,7 +145,6 @@ class RssStream : public QObject{ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setDownloadFailed(){ |
|
|
|
void setDownloadFailed(){ |
|
|
|
// Change the stream icon to a red cross
|
|
|
|
|
|
|
|
downloadFailure = true; |
|
|
|
downloadFailure = true; |
|
|
|
lastRefresh.start(); |
|
|
|
lastRefresh.start(); |
|
|
|
} |
|
|
|
} |
|
|
@ -158,7 +156,6 @@ class RssStream : public QObject{ |
|
|
|
refreshed = false; |
|
|
|
refreshed = false; |
|
|
|
downloadFailure = false; |
|
|
|
downloadFailure = false; |
|
|
|
currently_loading = false; |
|
|
|
currently_loading = false; |
|
|
|
// XXX: remove it when gif can be displayed
|
|
|
|
|
|
|
|
iconPath = ":/Icons/rss.png"; |
|
|
|
iconPath = ":/Icons/rss.png"; |
|
|
|
qDebug("RSSStream constructed"); |
|
|
|
qDebug("RSSStream constructed"); |
|
|
|
} |
|
|
|
} |
|
|
@ -195,7 +192,6 @@ class RssStream : public QObject{ |
|
|
|
return alias; |
|
|
|
return alias; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Prefer the RssManager::setAlias to save the changed ones
|
|
|
|
|
|
|
|
void setAlias(QString _alias){ |
|
|
|
void setAlias(QString _alias){ |
|
|
|
alias = _alias; |
|
|
|
alias = _alias; |
|
|
|
} |
|
|
|
} |
|
|
@ -272,6 +268,8 @@ class RssStream : public QObject{ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
unsigned int getLastRefreshElapsed() const{ |
|
|
|
unsigned int getLastRefreshElapsed() const{ |
|
|
|
|
|
|
|
if(!refreshed) |
|
|
|
|
|
|
|
return STREAM_REFRESH_INTERVAL+1; |
|
|
|
return lastRefresh.elapsed(); |
|
|
|
return lastRefresh.elapsed(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -384,6 +382,7 @@ class RssManager : public QObject{ |
|
|
|
private : |
|
|
|
private : |
|
|
|
QHash<QString, RssStream*> streams; |
|
|
|
QHash<QString, RssStream*> streams; |
|
|
|
downloadThread *downloader; |
|
|
|
downloadThread *downloader; |
|
|
|
|
|
|
|
QTimer newsRefresher; |
|
|
|
|
|
|
|
|
|
|
|
signals: |
|
|
|
signals: |
|
|
|
void feedInfosChanged(QString url, QString aliasOrUrl, unsigned int nbUnread); |
|
|
|
void feedInfosChanged(QString url, QString aliasOrUrl, unsigned int nbUnread); |
|
|
@ -441,12 +440,30 @@ class RssManager : public QObject{ |
|
|
|
emit feedInfosChanged(url, stream->getAliasOrUrl(), stream->getNbUnRead()); |
|
|
|
emit feedInfosChanged(url, stream->getAliasOrUrl(), stream->getNbUnRead()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void refreshOldFeeds(){ |
|
|
|
|
|
|
|
qDebug("Refreshing old rss feeds"); |
|
|
|
|
|
|
|
RssStream *stream; |
|
|
|
|
|
|
|
foreach(stream, streams){ |
|
|
|
|
|
|
|
QString url = stream->getUrl(); |
|
|
|
|
|
|
|
if(stream->isLoading()) return; |
|
|
|
|
|
|
|
if(stream->getLastRefreshElapsed() < STREAM_REFRESH_INTERVAL) return; |
|
|
|
|
|
|
|
qDebug("Refreshing feed: %s...", (const char*)url.toUtf8()); |
|
|
|
|
|
|
|
stream->setLoading(true); |
|
|
|
|
|
|
|
downloader->downloadUrl(url); |
|
|
|
|
|
|
|
if(!stream->hasCustomIcon()){ |
|
|
|
|
|
|
|
downloader->downloadUrl(stream->getIconUrl()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public : |
|
|
|
public : |
|
|
|
RssManager(){ |
|
|
|
RssManager(){ |
|
|
|
downloader = new downloadThread(this); |
|
|
|
downloader = new downloadThread(this); |
|
|
|
connect(downloader, SIGNAL(downloadFinished(QString, QString)), this, SLOT(processFinishedDownload(QString, QString))); |
|
|
|
connect(downloader, SIGNAL(downloadFinished(QString, QString)), this, SLOT(processFinishedDownload(QString, QString))); |
|
|
|
connect(downloader, SIGNAL(downloadFailure(QString, QString)), this, SLOT(handleDownloadFailure(QString, QString))); |
|
|
|
connect(downloader, SIGNAL(downloadFailure(QString, QString)), this, SLOT(handleDownloadFailure(QString, QString))); |
|
|
|
loadStreamList(); |
|
|
|
loadStreamList(); |
|
|
|
|
|
|
|
connect(&newsRefresher, SIGNAL(timeout()), this, SLOT(refreshOldFeeds())); |
|
|
|
|
|
|
|
newsRefresher.start(60000); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
~RssManager(){ |
|
|
|
~RssManager(){ |
|
|
|