Feed coloring.
This commit is contained in:
parent
4bf4daa7eb
commit
c3d2304910
@ -22,8 +22,7 @@ CREATE TABLE IF NOT EXISTS Categories (
|
||||
title VARCHAR(100) NOT NULL UNIQUE CHECK (title != ''),
|
||||
description TEXT,
|
||||
date_created BIGINT NOT NULL CHECK (date_created != 0),
|
||||
icon BLOB,
|
||||
type INTEGER NOT NULL
|
||||
icon BLOB
|
||||
);
|
||||
-- !
|
||||
DROP TABLE IF EXISTS Feeds;
|
||||
@ -73,9 +72,9 @@ CREATE TABLE IF NOT EXISTS Messages (
|
||||
FOREIGN KEY (feed) REFERENCES Feeds (id)
|
||||
);
|
||||
-- !
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, 0, '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');
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, icon) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, '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');
|
||||
-- !
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, 0, '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');
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, icon) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, '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');
|
||||
-- !
|
||||
INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, type) VALUES ('Linux Today', 'Linux Today - Linux News on Internet Time.', 1388678961000, 1, 'UTF-8', 'http://feeds.feedburner.com/linuxtoday/linux?format=xml', 0, 0, 1);
|
||||
-- !
|
||||
|
@ -16,8 +16,7 @@ CREATE TABLE IF NOT EXISTS Categories (
|
||||
title TEXT NOT NULL UNIQUE CHECK (title != ''),
|
||||
description TEXT,
|
||||
date_created INTEGER NOT NULL CHECK (date_created != 0),
|
||||
icon BLOB,
|
||||
type INTEGER NOT NULL
|
||||
icon BLOB
|
||||
);
|
||||
-- !
|
||||
DROP TABLE IF EXISTS Feeds;
|
||||
@ -67,9 +66,9 @@ CREATE TABLE IF NOT EXISTS Messages (
|
||||
FOREIGN KEY (feed) REFERENCES Feeds (id)
|
||||
);
|
||||
-- !
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, 0, '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');
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, icon) VALUES (1, -1, 'Linux', 'Collections of GNU/Linux-related feeds.', 1388678961000, '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');
|
||||
-- !
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, type, icon) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, 0, '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');
|
||||
INSERT INTO Categories (id, parent_id, title, description, date_created, icon) VALUES (2, -1, 'RSS Guard', 'News and updates on RSS Guard.', 1388678961000, 'AAAAIgBRAFAAaQB4AG0AYQBwAEkAYwBvAG4ARQBuAGcAaQBuAGUAAAABAAAAAYlQTkcNChoKAAAADUlIRFIAAABAAAAAQAgGAAAAqmlx3gAAAAlwSFlzAAAOxAAADsQBlSsOGwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMS0wNy0yOVQxNToxOTo1MCswMzowMMnGKbgAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTEtMDctMjlUMTU6MTg6MzcrMDM6MDBUkc0zAAAHP0lEQVR4nO1bzW4byRGu6u6RhqRImiJlErQBWQgPWgJrR9cY2D3swTDyBntIgN08RE55gCB5gzxA7jn5sMcA0cJGYishEIRrQ7sytdFfRIW0VsPpqhw0Qw+H3UOO5RVHm/2AAcmZ/qmqrv66qtkD8CP+v4FzPMc5ysXBkSvTSFJM1ut1t1gs5jc3N6u5XM5J0a5++fLlwbNnz04BwL+ijN8rlOW+qFar+XK5XHv48OGnlUrll4hYRMSZI8rMCACj27dv/1Ep9fvt7e0jANDvVer3CKMB2u22Ojw8LFQqlc1CofArrfU95nTe7DjO561W6+n29vafAOA7yOh0MBpgOBwKIYQLAFUiKvu+D2kNoJRaLRaLnz548ODPz58//zcsxgAMAJRUwDYFYHl5WTCzGI1Gly2lNAARgVLq462trV/cv3//n8HUuBZorQe9Xu+rnZ2dg0aj8V2n0xmBZQCsBog0BkSJRrSCmW/lcrnfMPPonRp4RzCzXygUdorF4u+ePn36l1arddbtdi9MZa0GYGZkZiQi0Fqn9gCAS+N5nuciopu68hWhlPpodXXVbzQavz45OenC5Wo0RcaJHkBE4Hke+H6mV7IpMDMIIUAp9aGU8t5gMOi12+1hp9OZywByd3dXbm1tFUql0iozi3edAouE1hqEEEvlcvnO3bt3Ky9evPgPXHrAhBHixOQ0m83So0ePPqlUKp8rpX7KzDUAELaOEK+N24yYMTUJEY+01n87PT39w5MnT77Y29v7LwCMOUlGCjvFYrH0+PHjnzcajd9KKbeIqBBwwbij8Lvp9yKuGTIhABSUUj/J5XI/q9VqX7969eprz/N8CJbHcArg6upqbmNjY71arX5GRHc8z5syZzjaYUeLHv0QcXlMXrG0tHSnUql8trGx8fe9vb2vTk5OfADg0LWVlDLvuu49IcRmuPbbOop2lgVEZbFNidFoBEqpD4rF4oaUMg/B4AsAgPX1dSmEyPm+X2LmZVMjiDjuKPoZva4Lpn7jMsXBzEBEy8xcEkLk1tfXJUBgBa01SikdRFRENGVFRDSO/rvEBu8Dtn7j9+O/iQiISEkpHa01AgQeEPxAZp5i+7g1s+T6ccwja6AjhgaYigPmGdVFjfwszBock9wTBvB9H6MFo64/y+2v2zNMckTvmb4j4ljHECJSCIUQaGvEhusmwLT9xvUJdBxXHHsAInKcAEMPMJFgNOhYFC/YZIo/j94nIkBEDu+pSGHr5qdJySyQYZIMCd477QHNZhOOjo4mHoSNLHrJS4NZvBD8xqWlJazVarC/v39pgF6vB47jjLfAk0jQ1lHWYCHBUD/s9XoAYMjy0pBgFgyRRsaZy2B0CsyrXFaNECfAyFS2L4PxylkguqvCxGHGZTAsbwsgbAlSFpAyN5j2gLW1NQw2PsabH/ENBlsHWbiSlDeUR2bGtbW1t8lQgMQ/QbMw1+fFDFkn9JyYAvFQ2Ob6WUdSWiyEMJOgrbLt2SwXvA6YZJhX/hATHhDmyKYKSRFhFrwkadSjiOsYzwWAiFCIt45xk0JhE2KJUJjuj40gAMb7ABO5wKwV4CbApEOY9IX7AlNxQLxiUgywyFQ4RJKM4fPoJ8RWOmMglGajIQsekjJsT+aAKKvOygazsEzOk7HGB8saCuPlVomxERMWrXxchlmyB95tjQMQwB7fZ0HZeWGTNaKbPRkK9sxMlW6UEULElkEAUzIUFBzHyKaIL/49i0iSNboKWDkgLGha4qL3s2wE2+6wjbCndoSICG0nQrKw7s+CSfZw0IhoauN35ikxU2M/JBgDoSQl4x6waIPMI08sDpgmwci/w8Zs0EaKWYKN9Ax8gJD077AJNlLMAhICnrnqjw2glMKAJCYaSRMZZglxuUNdiAiVUpPpMMDlGRqIccBNUtgGQ1yA0TNQiVPgh2KApOkwMQXCCia3z/r6H0cSIUanwNgAwTsBqbfFF22YtF7KzBg9+xw9JSYg4IQ0jd7AaSKklGLilFgETESZfb/nqgh0mxgxAQDQ7/dJKeVdXFwM37x5cxLdCc5q4DMLcdkREYbD4fH5+flQKeX1+/23Z4Xz+bzv+/6AmQ96vd5z13XrrusWTMdi5gkyvi9emGeHyibj+fn58PXr1y+01gda60G5XB4dHh5eGmB3d9er1+t9RNw9ODj4UmudbzabH66srNySUo5PlJsUm0fZeeolxfBJmFVPa60Hg8Fpr9fbOT4+/pKZd33f73e73RHA21WAXNc9Y+ZviOivx8fHXr/ff6WUqgohUmeMIaJ/sFwFV3lhg4h83/ePfd//FzP/Qwjxjeu6ZxAcl48OA9br9Xwul6t5ntcUQtQR8RYRpXljNHMQQoyY+ZSZv3UcZ//i4uJwf3//HAIyjPsmtttt5+zsbEVrvSKlXCKi9zOMC4IQgrTWnpRyUCqVBp1OZ+JFCNsERgCQrVZLjkajmxUCxuA4Dne73fBdoSnC+B/xChTkpBznVAAAAABJRU5ErkJgggAAAKoAQwA6AC8AVQBzAGUAcgBzAC8AcgBvAHQAdABlAHIALwBEAG8AYwB1AG0AZQBuAHQAcwAvAFAAcgBvAGoAZQBrAHQAeQAvAHIAcwBzAGcAdQBhAHIAZAAtAGIAdQBpAGwAZAAvAGkAYwBvAG4AcwAvAG0AaQBuAGkALQBrAGYAYQBlAG4AegBhAC8AZgBvAGwAZABlAHIALQBiAGwAYQBjAGsALgBwAG4AZwAAAEAAAABAAAAAAAAAAAE=');
|
||||
-- !
|
||||
INSERT INTO Feeds (title, description, date_created, category, encoding, url, protected, update_type, type) VALUES ('Linux Today', 'Linux Today - Linux News on Internet Time.', 1388678961000, 1, 'UTF-8', 'http://feeds.feedburner.com/linuxtoday/linux?format=xml', 0, 0, 1);
|
||||
-- !
|
||||
|
@ -16,8 +16,7 @@ CREATE TABLE IF NOT EXISTS Categories (
|
||||
title TEXT NOT NULL UNIQUE CHECK (title != ''),
|
||||
description TEXT,
|
||||
date_created INTEGER NOT NULL CHECK (date_created != 0),
|
||||
icon BLOB,
|
||||
type INTEGER NOT NULL
|
||||
icon BLOB
|
||||
);
|
||||
-- !
|
||||
DROP TABLE IF EXISTS Feeds;
|
||||
|
@ -14,7 +14,7 @@ Added:
|
||||
<li>"Defragment database" button shortcut is now changeable.</li>
|
||||
<li>Added option to clear keyboard shortcuts.</li>
|
||||
<li>Added "progress bar" to web browser.</li>
|
||||
<li>Added blue color to feeds/categories which contain unread msgs.</li>
|
||||
<li>Added blue color to feeds which contain unread messages.</li>
|
||||
<li>Added new "greeen" skin.</li>
|
||||
<li>Added "Web browser" menu to corner main menu button.</li>
|
||||
</ul>
|
||||
|
@ -176,14 +176,13 @@ bool FeedsModel::addCategory(FeedsModelCategory *category,
|
||||
|
||||
query_add.setForwardOnly(true);
|
||||
query_add.prepare("INSERT INTO Categories "
|
||||
"(parent_id, title, description, date_created, icon, type) "
|
||||
"VALUES (:parent_id, :title, :description, :date_created, :icon, :type);");
|
||||
"(parent_id, title, description, date_created, icon) "
|
||||
"VALUES (:parent_id, :title, :description, :date_created, :icon);");
|
||||
query_add.bindValue(":parent_id", parent->id());
|
||||
query_add.bindValue(":title", category->title());
|
||||
query_add.bindValue(":description", category->description());
|
||||
query_add.bindValue(":date_created", category->creationDate().toMSecsSinceEpoch());
|
||||
query_add.bindValue(":icon", IconFactory::instance()->toByteArray(category->icon()));
|
||||
query_add.bindValue(":type", (int) FeedsModelCategory::Standard);
|
||||
|
||||
if (!query_add.exec()) {
|
||||
// Query failed.
|
||||
@ -467,7 +466,9 @@ QList<Message> FeedsModel::messagesForFeeds(const QList<FeedsModelFeed*> &feeds)
|
||||
}
|
||||
|
||||
int FeedsModel::columnCount(const QModelIndex &parent) const {
|
||||
return itemForIndex(parent)->columnCount();
|
||||
Q_UNUSED(parent)
|
||||
|
||||
return FEEDS_VIEW_COLUMN_COUNT;
|
||||
}
|
||||
|
||||
FeedsModelRootItem *FeedsModel::itemForIndex(const QModelIndex &index) const {
|
||||
@ -499,7 +500,7 @@ QModelIndex FeedsModel::indexForItem(FeedsModelRootItem *item) const {
|
||||
|
||||
QList<QModelIndex> parents;
|
||||
|
||||
// Start with root item.
|
||||
// Start with root item (which obviously has invalid index).
|
||||
parents << indexForItem(m_rootItem);
|
||||
|
||||
while (!parents.isEmpty()) {
|
||||
@ -541,10 +542,11 @@ void FeedsModel::reloadChangedLayout(QModelIndexList list) {
|
||||
emit dataChanged(index(indx.row(), 0, indx_parent),
|
||||
index(indx.row(), FDS_MODEL_COUNTS_INDEX, indx_parent));
|
||||
|
||||
if (indx_parent.isValid()) {
|
||||
// NOTE: The code below seems not to be necessary.
|
||||
/*if (indx_parent.isValid()) {
|
||||
// Make sure that data of parent are changed too.
|
||||
list.prepend(indx_parent);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
@ -585,22 +587,11 @@ void FeedsModel::loadFromDatabase() {
|
||||
}
|
||||
|
||||
while (query_categories.next()) {
|
||||
// Process this category.
|
||||
FeedsModelCategory::Type type = static_cast<FeedsModelCategory::Type>(query_categories.value(CAT_DB_TYPE_INDEX).toInt());
|
||||
CategoryAssignmentItem pair;
|
||||
pair.first = query_categories.value(CAT_DB_PARENT_ID_INDEX).toInt();
|
||||
pair.second = FeedsModelCategory::loadFromRecord(query_categories.record());
|
||||
|
||||
switch (type) {
|
||||
case FeedsModelCategory::Standard: {
|
||||
CategoryAssignmentItem pair;
|
||||
pair.first = query_categories.value(CAT_DB_PARENT_ID_INDEX).toInt();
|
||||
pair.second = FeedsModelCategory::loadFromRecord(query_categories.record());
|
||||
|
||||
categories << pair;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
categories << pair;
|
||||
}
|
||||
|
||||
// All categories are now loaded.
|
||||
|
@ -29,7 +29,6 @@
|
||||
|
||||
FeedsModelCategory::FeedsModelCategory(FeedsModelRootItem *parent_item)
|
||||
: FeedsModelRootItem(parent_item) {
|
||||
m_type = Standard;
|
||||
m_kind = FeedsModelRootItem::Category;
|
||||
}
|
||||
|
||||
@ -41,7 +40,6 @@ FeedsModelCategory::FeedsModelCategory(const FeedsModelCategory &other)
|
||||
m_icon = other.icon();
|
||||
m_childItems = other.childItems();
|
||||
m_parentItem = other.parent();
|
||||
m_type = other.type();
|
||||
m_creationDate = other.creationDate();
|
||||
m_description = other.description();
|
||||
}
|
||||
|
@ -33,12 +33,6 @@ class FeedsModelCategory : public FeedsModelRootItem {
|
||||
Q_DECLARE_TR_FUNCTIONS(FeedsModelCategory)
|
||||
|
||||
public:
|
||||
// Describes possible types of categories.
|
||||
// NOTE: This is equivavelnt to Categories(type).
|
||||
enum Type {
|
||||
Standard = 0
|
||||
};
|
||||
|
||||
// Constructors and destructors
|
||||
explicit FeedsModelCategory(FeedsModelRootItem *parent_item = NULL);
|
||||
explicit FeedsModelCategory(const FeedsModelCategory &other);
|
||||
@ -51,20 +45,8 @@ class FeedsModelCategory : public FeedsModelRootItem {
|
||||
// database.
|
||||
bool removeItself();
|
||||
|
||||
// All types of categories offer these getters/setters.
|
||||
inline Type type() const {
|
||||
return m_type;
|
||||
}
|
||||
|
||||
inline void setType(const Type &type) {
|
||||
m_type = type;
|
||||
}
|
||||
|
||||
// Loads particular "standard category" from given sql record.
|
||||
static FeedsModelCategory *loadFromRecord(const QSqlRecord &record);
|
||||
|
||||
protected:
|
||||
Type m_type;
|
||||
};
|
||||
|
||||
#endif // FEEDSMODELCLASSICCATEGORY_H
|
||||
|
@ -80,7 +80,7 @@ QString FeedsModelFeed::typeToString(FeedsModelFeed::Type type) {
|
||||
}
|
||||
}
|
||||
|
||||
void FeedsModelFeed::updateCounts(bool including_total_count) {
|
||||
void FeedsModelFeed::updateCounts(bool including_total_count, bool update_feed_statuses) {
|
||||
QSqlDatabase database = DatabaseFactory::instance()->connection("FeedsModelFeed",
|
||||
DatabaseFactory::FromSettings);
|
||||
QSqlQuery query_all(database);
|
||||
@ -98,7 +98,13 @@ void FeedsModelFeed::updateCounts(bool including_total_count) {
|
||||
if (query_all.exec(QString("SELECT count(*) FROM Messages "
|
||||
"WHERE feed = %1 AND is_deleted = 0 AND is_read = 0;").arg(id())) &&
|
||||
query_all.next()) {
|
||||
m_unreadCount = query_all.value(0).toInt();
|
||||
int new_unread_count = query_all.value(0).toInt();
|
||||
|
||||
if (update_feed_statuses && m_status == NewMessages && new_unread_count != m_unreadCount) {
|
||||
m_status = Normal;
|
||||
}
|
||||
|
||||
m_unreadCount = new_unread_count;
|
||||
}
|
||||
}
|
||||
|
||||
@ -331,6 +337,9 @@ QVariant FeedsModelFeed::data(int column, int role) const {
|
||||
case Qt::FontRole:
|
||||
return countOfUnreadMessages() > 0 ? m_boldFont : m_normalFont;
|
||||
|
||||
case Qt::ForegroundRole:
|
||||
return m_status == NewMessages ? QColor(Qt::blue) : QVariant();
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
@ -472,7 +481,10 @@ void FeedsModelFeed::updateMessages(const QList<Message> &messages) {
|
||||
query_insert.bindValue(":date_created", message.m_created.toMSecsSinceEpoch());
|
||||
query_insert.bindValue(":contents", message.m_contents);
|
||||
|
||||
query_insert.exec();
|
||||
if (query_insert.exec() && query_insert.numRowsAffected() == 1) {
|
||||
setStatus(NewMessages);
|
||||
}
|
||||
|
||||
query_insert.finish();
|
||||
}
|
||||
}
|
||||
@ -483,3 +495,7 @@ void FeedsModelFeed::updateMessages(const QList<Message> &messages) {
|
||||
qDebug("Transaction commit for message downloader failed.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -48,9 +48,18 @@ class FeedsModelFeed : public FeedsModelRootItem {
|
||||
|
||||
// Specifies the auto-update strategy for the feed.
|
||||
enum AutoUpdateType {
|
||||
DontAutoUpdate = 0,
|
||||
DefaultAutoUpdate = 1,
|
||||
SpecificAutoUpdate = 2
|
||||
DontAutoUpdate = 0,
|
||||
DefaultAutoUpdate = 1,
|
||||
SpecificAutoUpdate = 2
|
||||
};
|
||||
|
||||
// Specifies the actual "status" of the feed.
|
||||
// For example if it has new messages, error
|
||||
// occurred, and so on.
|
||||
enum Status {
|
||||
Normal = 0,
|
||||
NewMessages = 1,
|
||||
NetworkError = 2
|
||||
};
|
||||
|
||||
// Constructors and destructors.
|
||||
@ -152,6 +161,14 @@ class FeedsModelFeed : public FeedsModelRootItem {
|
||||
m_autoUpdateRemainingInterval = autoUpdateRemainingInterval;
|
||||
}
|
||||
|
||||
inline Status status() const {
|
||||
return m_status;
|
||||
}
|
||||
|
||||
inline void setStatus(const Status &status) {
|
||||
m_status = status;
|
||||
}
|
||||
|
||||
// Loads standard feed object from given SQL record.
|
||||
static FeedsModelFeed *loadFromRecord(const QSqlRecord &record);
|
||||
|
||||
@ -169,7 +186,7 @@ class FeedsModelFeed : public FeedsModelRootItem {
|
||||
|
||||
public slots:
|
||||
// Updates counts of all/unread messages for this feed.
|
||||
void updateCounts(bool including_total_count = true);
|
||||
void updateCounts(bool including_total_count = true, bool update_feed_statuses = true);
|
||||
|
||||
protected:
|
||||
// Persistently stores given messages into the database
|
||||
@ -182,6 +199,7 @@ class FeedsModelFeed : public FeedsModelRootItem {
|
||||
QString m_username;
|
||||
QString m_password;
|
||||
|
||||
Status m_status;
|
||||
Type m_type;
|
||||
int m_totalCount;
|
||||
int m_unreadCount;
|
||||
|
@ -57,11 +57,6 @@ class FeedsModelRootItem {
|
||||
return m_childItems.size();
|
||||
}
|
||||
|
||||
inline virtual int columnCount() const {
|
||||
// FeedsModel offers exactly two columns.
|
||||
return 2;
|
||||
}
|
||||
|
||||
inline virtual void appendChild(FeedsModelRootItem *child) {
|
||||
m_childItems.append(child);
|
||||
child->setParent(this);
|
||||
|
@ -55,6 +55,7 @@
|
||||
#define CLOSE_LOCK_TIMEOUT 3000
|
||||
#define DOWNLOAD_TIMEOUT 5000
|
||||
#define MESSAGES_VIEW_DEFAULT_COL 170
|
||||
#define FEEDS_VIEW_COLUMN_COUNT 2
|
||||
#define ELLIPSIS_LENGTH 3
|
||||
#define MIN_CATEGORY_NAME_LENGTH 3
|
||||
#define INTERNAL_URL_NEWSPAPER "@APP_LOW_NAME@:newspaper"
|
||||
@ -121,7 +122,6 @@
|
||||
#define CAT_DB_DESCRIPTION_INDEX 3
|
||||
#define CAT_DB_DCREATED_INDEX 4
|
||||
#define CAT_DB_ICON_INDEX 5
|
||||
#define CAT_DB_TYPE_INDEX 6
|
||||
|
||||
// Indexes of columns as they are DEFINED IN THE TABLE for FEEDS.
|
||||
#define FDS_DB_ID_INDEX 0
|
||||
|
@ -354,17 +354,7 @@ void FeedsView::editSelectedItem() {
|
||||
FeedsModelFeed *feed;
|
||||
|
||||
if ((category = isCurrentIndexCategory()) != NULL) {
|
||||
// Category is selected.
|
||||
switch (category->type()) {
|
||||
case FeedsModelCategory::Standard: {
|
||||
// User wants to edit standard category.
|
||||
editCategory(static_cast<FeedsModelCategory*>(category));
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
editCategory(static_cast<FeedsModelCategory*>(category));
|
||||
}
|
||||
else if ((feed = isCurrentIndexFeed()) != NULL) {
|
||||
// Feed is selected.
|
||||
@ -513,7 +503,7 @@ void FeedsView::updateCountsOfParticularFeed(FeedsModelFeed *feed,
|
||||
QModelIndex index = m_sourceModel->indexForItem(feed);
|
||||
|
||||
if (index.isValid()) {
|
||||
feed->updateCounts(update_total_too);
|
||||
feed->updateCounts(update_total_too, false);
|
||||
m_sourceModel->reloadChangedLayout(QModelIndexList() << index);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user