Added network statuses indication to feeds list.

This commit is contained in:
Martin Rotter 2014-08-29 08:28:26 +02:00
parent 7227d39c9b
commit 91ba9676ce
3 changed files with 29 additions and 13 deletions

View File

@ -39,6 +39,7 @@
FeedsModelFeed::FeedsModelFeed(FeedsModelRootItem *parent_item) FeedsModelFeed::FeedsModelFeed(FeedsModelRootItem *parent_item)
: FeedsModelRootItem(parent_item), : FeedsModelRootItem(parent_item),
m_status(Normal), m_status(Normal),
m_networkError(QNetworkReply::NoError),
m_type(Rss0X), m_type(Rss0X),
m_totalCount(0), m_totalCount(0),
m_unreadCount(0), m_unreadCount(0),
@ -83,7 +84,7 @@ QString FeedsModelFeed::typeToString(FeedsModelFeed::Type type) {
void FeedsModelFeed::updateCounts(bool including_total_count, bool update_feed_statuses) { void FeedsModelFeed::updateCounts(bool including_total_count, bool update_feed_statuses) {
QSqlDatabase database = qApp->database()->connection("FeedsModelFeed", QSqlDatabase database = qApp->database()->connection("FeedsModelFeed",
DatabaseFactory::FromSettings); DatabaseFactory::FromSettings);
QSqlQuery query_all(database); QSqlQuery query_all(database);
query_all.setForwardOnly(true); query_all.setForwardOnly(true);
@ -312,12 +313,14 @@ QVariant FeedsModelFeed::data(int column, int role) const {
//: Tooltip for feed. //: Tooltip for feed.
return tr("%1 (%2)\n" return tr("%1 (%2)\n"
"%3\n\n" "%3\n\n"
"Network status: %6\n"
"Encoding: %4\n" "Encoding: %4\n"
"Auto-update status: %5").arg(m_title, "Auto-update status: %5").arg(m_title,
FeedsModelFeed::typeToString(m_type), FeedsModelFeed::typeToString(m_type),
m_description, m_description,
m_encoding, m_encoding,
auto_update_string); auto_update_string,
NetworkFactory::networkErrorText(m_networkError));
} }
else if (column == FDS_MODEL_COUNTS_INDEX) { else if (column == FDS_MODEL_COUNTS_INDEX) {
//: Tooltip for "unread" column of feed list. //: Tooltip for "unread" column of feed list.
@ -339,7 +342,16 @@ QVariant FeedsModelFeed::data(int column, int role) const {
return countOfUnreadMessages() > 0 ? m_boldFont : m_normalFont; return countOfUnreadMessages() > 0 ? m_boldFont : m_normalFont;
case Qt::ForegroundRole: case Qt::ForegroundRole:
return m_status == NewMessages ? QColor(Qt::blue) : QVariant(); switch (m_status) {
case NewMessages:
return QColor(Qt::blue);
case NetworkError:
return QColor(Qt::red);
default:
return QVariant();
}
default: default:
return QVariant(); return QVariant();
@ -349,16 +361,19 @@ QVariant FeedsModelFeed::data(int column, int role) const {
void FeedsModelFeed::update() { void FeedsModelFeed::update() {
QByteArray feed_contents; QByteArray feed_contents;
int download_timeout = qApp->settings()->value(APP_CFG_FEEDS, "feed_update_timeout", DOWNLOAD_TIMEOUT).toInt(); int download_timeout = qApp->settings()->value(APP_CFG_FEEDS, "feed_update_timeout", DOWNLOAD_TIMEOUT).toInt();
QNetworkReply::NetworkError download_result = NetworkFactory::downloadFile(url(), download_timeout, m_networkError = NetworkFactory::downloadFile(url(), download_timeout,
feed_contents, passwordProtected(), feed_contents, passwordProtected(),
username(), password()); username(), password());
if (m_networkError != QNetworkReply::NoError) {
qWarning("Error during fetching of new messages for feed '%s' (id %d).", qPrintable(url()), id());
m_status = NetworkError;
if (download_result != QNetworkReply::NoError) {
qWarning("Error during fetching of new messages for feed '%s' (id %d).",
qPrintable(url()),
id());
return; return;
} }
else {
m_status = Normal;
}
// Encode downloaded data for further parsing. // Encode downloaded data for further parsing.
QTextCodec *codec = QTextCodec::codecForName(encoding().toLocal8Bit()); QTextCodec *codec = QTextCodec::codecForName(encoding().toLocal8Bit());
@ -399,7 +414,7 @@ void FeedsModelFeed::update() {
bool FeedsModelFeed::removeItself() { bool FeedsModelFeed::removeItself() {
QSqlDatabase database = qApp->database()->connection("FeedsModelFeed", QSqlDatabase database = qApp->database()->connection("FeedsModelFeed",
DatabaseFactory::FromSettings); DatabaseFactory::FromSettings);
QSqlQuery query_remove(database); QSqlQuery query_remove(database);
query_remove.setForwardOnly(true); query_remove.setForwardOnly(true);
@ -422,7 +437,7 @@ bool FeedsModelFeed::removeItself() {
void FeedsModelFeed::updateMessages(const QList<Message> &messages) { void FeedsModelFeed::updateMessages(const QList<Message> &messages) {
int feed_id = id(); int feed_id = id();
QSqlDatabase database = qApp->database()->connection("FeedsModelFeed", QSqlDatabase database = qApp->database()->connection("FeedsModelFeed",
DatabaseFactory::FromSettings); DatabaseFactory::FromSettings);
// Prepare queries. // Prepare queries.
QSqlQuery query_select(database); QSqlQuery query_select(database);

View File

@ -199,6 +199,7 @@ class FeedsModelFeed : public FeedsModelRootItem {
QString m_password; QString m_password;
Status m_status; Status m_status;
QNetworkReply::NetworkError m_networkError;
Type m_type; Type m_type;
int m_totalCount; int m_totalCount;
int m_unreadCount; int m_unreadCount;

View File

@ -80,7 +80,7 @@ QString NetworkFactory::networkErrorText(QNetworkReply::NetworkError error_code)
case QNetworkReply::NoError: case QNetworkReply::NoError:
//: Network status. //: Network status.
return tr("success"); return tr("no errors");
case QNetworkReply::UnknownContentError: case QNetworkReply::UnknownContentError:
//: Network status. //: Network status.