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;
}
QString FeedsSelection::generateDatabaseFilter() {
if (m_selectedItem == NULL) {
return "feed IN () AND is_deleted = 0";
}
QString FeedsSelection::generateListOfIds() {
if (m_selectedItem != NULL &&
(m_selectedItem->kind() == FeedsModelRootItem::Feed || m_selectedItem->kind() == FeedsModelRootItem::Category)) {
QList<FeedsModelRootItem*> children = m_selectedItem->getRecursiveChildren();
QStringList stringy_ids;
switch (m_selectedItem->kind()) {
case FeedsModelRootItem::RecycleBin:
return "is_deleted = 1 AND is_pdeleted = 0";
children.append(m_selectedItem);
case FeedsModelRootItem::Category:
case FeedsModelRootItem::Feed: {
QList<FeedsModelRootItem*> children = m_selectedItem->getRecursiveChildren();
QStringList stringy_ids;
children.append(m_selectedItem);
foreach (FeedsModelRootItem *child, children) {
if (child->kind() == FeedsModelRootItem::Feed) {
stringy_ids.append(QString::number(child->id()));
}
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 "feed IN () AND is_deleted = 0";
return stringy_ids.join(", ");
}
else {
return QString();
}
}

View File

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

View File

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

View File

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

View File

@ -624,24 +624,7 @@ void FeedsView::setupAppearance() {
}
void FeedsView::selectionChanged(const QItemSelection &selected, const QItemSelection &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;
}*/
QTreeView::selectionChanged(selected, deselected);
emit feedsSelected(FeedsSelection(selectedItem()));
}

View File

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