Fixing new selection approach.

This commit is contained in:
Martin Rotter 2015-05-02 19:51:37 +02:00
parent 63d4b93433
commit 5bcf351dc7
6 changed files with 31 additions and 61 deletions

View file

@ -37,32 +37,23 @@ FeedsModelRootItem *FeedsSelection::selectedItem() const {
return m_selectedItem; return m_selectedItem;
} }
QString FeedsSelection::generateDatabaseFilter() { QString FeedsSelection::generateListOfIds() {
if (m_selectedItem == NULL) { if (m_selectedItem != NULL &&
return "feed IN () AND is_deleted = 0"; (m_selectedItem->kind() == FeedsModelRootItem::Feed || m_selectedItem->kind() == FeedsModelRootItem::Category)) {
} QList<FeedsModelRootItem*> children = m_selectedItem->getRecursiveChildren();
QStringList stringy_ids;
switch (m_selectedItem->kind()) { children.append(m_selectedItem);
case FeedsModelRootItem::RecycleBin:
return "is_deleted = 1 AND is_pdeleted = 0";
case FeedsModelRootItem::Category: foreach (FeedsModelRootItem *child, children) {
case FeedsModelRootItem::Feed: { if (child->kind() == FeedsModelRootItem::Feed) {
QList<FeedsModelRootItem*> children = m_selectedItem->getRecursiveChildren(); stringy_ids.append(QString::number(child->id()));
QStringList stringy_ids;
children.append(m_selectedItem);
foreach (FeedsModelRootItem *child, children) {
if (child->kind() == FeedsModelRootItem::Feed) {
stringy_ids.append(QString::number(child->id()));
}
} }
return QString("feed IN (%1) AND is_deleted = 0").arg(stringy_ids.join(", "));
} }
default: return stringy_ids.join(", ");
return "feed IN () AND is_deleted = 0"; }
else {
return QString();
} }
} }

View file

@ -21,7 +21,7 @@ class FeedsSelection {
MessageMode mode(); MessageMode mode();
FeedsModelRootItem *selectedItem() const; FeedsModelRootItem *selectedItem() const;
QString generateDatabaseFilter(); QString generateListOfIds();
private: private:
FeedsModelRootItem *m_selectedItem; FeedsModelRootItem *m_selectedItem;

View file

@ -55,8 +55,8 @@ void MessagesModel::setupIcons() {
m_unreadIcon = qApp->icons()->fromTheme("mail-mark-unread"); m_unreadIcon = qApp->icons()->fromTheme("mail-mark-unread");
} }
FeedsSelection MessagesModel::currentFeeds() const { FeedsSelection MessagesModel::loadedSelection() const {
return m_currentFeeds; return m_currentSelection;
} }
void MessagesModel::fetchAll() { void MessagesModel::fetchAll() {
@ -72,21 +72,18 @@ void MessagesModel::setupFonts() {
} }
void MessagesModel::loadMessages(const FeedsSelection &selection) { void MessagesModel::loadMessages(const FeedsSelection &selection) {
m_currentFeeds = selection; m_currentSelection = selection;
/* if (selection.size() == 1 && selection[0] == ID_RECYCLE_BIN) { if (m_currentSelection.mode() == FeedsSelection::MessagesFromRecycleBin) {
m_messageMode = MessagesFromRecycleBin;
setFilter("is_deleted = 1 AND is_pdeleted = 0"); setFilter("is_deleted = 1 AND is_pdeleted = 0");
} }
else { else {
m_messageMode = MessagesFromFeeds; QString assembled_ids = m_currentSelection.generateListOfIds();
QString assembled_ids = textualFeeds().join(", ");
setFilter(QString("feed IN (%1) AND is_deleted = 0").arg(assembled_ids)); setFilter(QString("feed IN (%1) AND is_deleted = 0").arg(assembled_ids));
qDebug("Loading messages from feeds: %s.", qPrintable(assembled_ids)); qDebug("Loading messages from feeds: %s.", qPrintable(assembled_ids));
}*/ }
setFilter(m_currentFeeds.generateDatabaseFilter());
select(); select();
fetchAll(); fetchAll();
} }
@ -282,7 +279,7 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
// If commit succeeded, then emit changes, so that view // If commit succeeded, then emit changes, so that view
// can reflect. // can reflect.
emit dataChanged(index(row_index, 0), index(row_index, columnCount() - 1)); emit dataChanged(index(row_index, 0), index(row_index, columnCount() - 1));
emit messageCountsChanged(m_currentFeeds.mode(), false, false); emit messageCountsChanged(m_currentSelection.mode(), false, false);
return true; return true;
} }
else { else {
@ -381,7 +378,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
QString sql_delete_query; QString sql_delete_query;
if (m_currentFeeds.mode() == FeedsSelection::MessagesFromFeeds) { if (m_currentSelection.mode() == FeedsSelection::MessagesFromFeeds) {
sql_delete_query = QString("UPDATE Messages SET is_deleted = %2 WHERE id IN (%1);").arg(message_ids.join(", "), sql_delete_query = QString("UPDATE Messages SET is_deleted = %2 WHERE id IN (%1);").arg(message_ids.join(", "),
QString::number(deleted)); QString::number(deleted));
} }
@ -394,7 +391,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
select(); select();
fetchAll(); fetchAll();
emit messageCountsChanged(m_currentFeeds.mode(), true, false); emit messageCountsChanged(m_currentSelection.mode(), true, false);
return true; return true;
} }
else { else {
@ -419,7 +416,7 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
select(); select();
fetchAll(); fetchAll();
emit messageCountsChanged(m_currentFeeds.mode(), false, false); emit messageCountsChanged(m_currentSelection.mode(), false, false);
return true; return true;
} }
else { else {
@ -428,7 +425,7 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
} }
bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) { bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
if (m_currentFeeds.mode() == FeedsSelection::MessagesFromFeeds) { if (m_currentSelection.mode() == FeedsSelection::MessagesFromFeeds) {
qDebug("Cannot restore non-deleted messages."); qDebug("Cannot restore non-deleted messages.");
return false; return false;
} }
@ -450,7 +447,7 @@ bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
select(); select();
fetchAll(); fetchAll();
emit messageCountsChanged(m_currentFeeds.mode(), true, true); emit messageCountsChanged(m_currentSelection.mode(), true, true);
return true; return true;
} }
else { else {

View file

@ -99,9 +99,7 @@ class MessagesModel : public QSqlTableModel {
Message messageAt(int row_index) const; Message messageAt(int row_index) const;
int messageId(int row_index) const; int messageId(int row_index) const;
void updateDateFormat(); FeedsSelection loadedSelection() const;
FeedsSelection currentFeeds() const;
public slots: public slots:
// To disable persistent changes submissions. // To disable persistent changes submissions.
@ -110,6 +108,7 @@ class MessagesModel : public QSqlTableModel {
return false; return false;
} }
void updateDateFormat();
void reloadWholeLayout(); void reloadWholeLayout();
// CORE messages manipulators. // CORE messages manipulators.
@ -155,7 +154,7 @@ class MessagesModel : public QSqlTableModel {
MessageFilter m_messageFilter; MessageFilter m_messageFilter;
QString m_customDateFormat; QString m_customDateFormat;
FeedsSelection m_currentFeeds; FeedsSelection m_currentSelection;
QList<QString> m_headerData; QList<QString> m_headerData;
QList<QString> m_tooltipData; QList<QString> m_tooltipData;

View file

@ -624,24 +624,7 @@ void FeedsView::setupAppearance() {
} }
void FeedsView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { void FeedsView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) {
/*QTreeView::selectionChanged(selected, deselected); QTreeView::selectionChanged(selected, deselected);
QList<FeedsModelFeed*> selected_feeds = selectedFeeds();
QList<int> selected_ids;
if (!selected_feeds.isEmpty()) {
foreach (FeedsModelFeed *feed, selected_feeds) {
#if defined(DEBUG)
QModelIndex index_for_feed = m_sourceModel->indexForItem(feed);
qDebug("Selecting feed '%s' (source index [%d, %d]).", qPrintable(feed->title()), index_for_feed.row(), index_for_feed.column());
#endif
selected_ids << feed->id();
}
}
else if (selectedRecycleBin() != NULL) {
selected_ids << ID_RECYCLE_BIN;
}*/
emit feedsSelected(FeedsSelection(selectedItem())); emit feedsSelected(FeedsSelection(selectedItem()));
} }

View file

@ -148,7 +148,7 @@ void MessagesView::contextMenuEvent(QContextMenuEvent *event) {
initializeContextMenu(); initializeContextMenu();
} }
if (sourceModel()->currentFeeds().mode() != FeedsSelection::MessagesFromRecycleBin) { if (sourceModel()->loadedSelection().mode() != FeedsSelection::MessagesFromRecycleBin) {
m_contextMenu->removeAction(qApp->mainForm()->m_ui->m_actionRestoreSelectedMessagesFromRecycleBin); m_contextMenu->removeAction(qApp->mainForm()->m_ui->m_actionRestoreSelectedMessagesFromRecycleBin);
} }
else { else {